5
我認爲我對承諾有一個體面的理解,直到我遇到了一個簡化的代碼段下面的問題。我的印象是,console.log調用會輸出first second third
,但取而代之的是second third first
。Javascript承諾不會等待解決
有人可以解釋爲什麼第二個和第三個承諾能夠繼續,而不等待第一個承諾。
var Q = require('q');
(function() {
var Obj = function() {
function first() {
var deferred = Q.defer();
setTimeout(function() {
console.log('in the first')
deferred.resolve();
}, 200);
return deferred.promise;
}
function second() {
return Q.fcall(function() {
console.log('in the second');
})
}
function third() {
return Q.fcall(function() {
console.log('in the third');
})
}
return {
first: first,
second: second,
third: third
}
};
var obj = Obj();
obj.first()
.then(obj.second())
.then(obj.third());
}());
該訣竅。我之所以調用函數的原因是,在實際的代碼中,我需要將參數傳遞給承諾方法,這些方法在此處被遺漏。它看起來像我將不得不包裝在一個額外的功能。謝謝您的幫助 – chris