我有一個對象(SoapClient)帶有一個函數(createClient),它返回一個已解決或拒絕的承諾。承諾的履行價值是客戶。我試圖調用SoapClient.createClient並在'then'方法中,將履行的promise值賦給我的本地客戶端變量,但除非我返回該函數,否則它不起作用。有人能解釋爲什麼嗎?謝謝。這裏是我的代碼:爲什麼我必須返回一個函數,返回一個承諾,在then方法中分配結果?
SoapClient的模塊:
const soap = require('some soap library').soap;
module.exports = {
createClient: (options) => {
const { option1, option2, option3, option4 } = options;
return new Promise((resolve, reject) => {
if (!option1 || !option2) {
reject('some error message');
}
soap.createClient(option3, {endpoint: option4}, (err, client) => {
if (err) {
reject(err);
}
//some code to set authentication here
resolve(client);
})
});
}
};
一些測試類:
before(() => {
let soapClient;
const options = { option1: 'something', option2: 'something', option3: 'something', option4: 'something' }
return SoapClient.createClient(options)
.then((client) => {
soapClient = client;
})
.catch((err) => {
throw new Error(err);
});
});
在這種情況下,SoapClient的正確分配的客戶端的履行承諾值,但如果我刪除return ,那麼soapClient變得不確定。爲什麼是這樣?有沒有辦法將soapClient分配給沒有返回的正確值?謝謝。
此代碼是否在函數中?你爲什麼在那裏有「返回」?另外,請記住promises是* asynchronous *,因此只有* createClient()完成並且調用'.then'之後,您的'soapClient'纔會被設置。 –
在其他地方看起來像是問題。這是函數的代碼嗎?你用什麼方式檢查變量soapClient?看起來像你調用沒有返回語句的函數,並得到undefined – Sabik
@Sabik:好點。刪除'return'將意味着這個函數被調用的任何地方都會得到一個'undefined'值。 –