我使用nodejs和庫Promise/A +(選擇這個,因爲它似乎是最受歡迎的)https://www.npmjs.com/package/promise。我面臨的問題是,儘管異步函數正在完成,但它仍然在失敗語句後完成。所以sv + ' No it failed'
總是打印在一個console.log消息(表明它已成功)之前,我在異步方法中。這個console.log消息應該先打印出來,因爲它在async方法中。我爲什麼會發生這種事情?即使異步方法返回成功,該承諾始終在失敗時運行?Nodejs保證不會按照它應該那樣工作?
我的代碼:
var promise = new Promise(function (resolve, reject) {
var u = asyncmethod(some_var);
if (u){
resolve(some_var)
}
else{
reject(some_var);
}
});
promise.then(function(sv) {
console.log(sv + ' Yes it worked');
}, function(em) {
console.log(sv + ' No it failed');
});
此代碼正常工作,因爲它應該。如果asyncmethod是異步的,那麼你沒有用這個代碼實現任何東西 - 因爲promises不會使異步代碼同步......另外,如果你使用的是nodejs,爲什麼不使用它的原生Promise(假設你正在使用nodejs 4.x或5.x) –
通常的'asyncmethod'要麼回調或返回一個承諾。你的既不。那麼它是如何異步的呢? – Bergi