我正在學習承諾庫,但堅持以下問題。承諾不會等待超時
//Function for getting sum
function getSum(n1, n2) {
var isAnyNegative = function() {
return n1 < 0 || n2 < 0;
}
var promise = new Promise(function(resolve, reject) {
if (isAnyNegative()) {
reject(Error("Negatives not supported"));
}
resolve(n1 + n2)
});
return promise;
}
////Function for getting Difference
function getDiff(n1,n2){
var diff = n1-n2;
setTimeout(function(){
console.log("value of diff--- ", diff)
return diff;
}, 2000)
}
getSum(5,6)
.then(function(callbackResult){
console.log("first callback-Result- ", callbackResult)
return getDiff(14,11);
}, function(error){
//handling error
})
.then(function(callbackResult){
console.log("second callback--Result- ", callbackResult)
return getSum(22,22);
},
function(error){
//handling error
})
.then(function(callbackResult){
console.log("third callback--Result- ", callbackResult)
}, function(error){
//handling error
})
我得到這個代碼片段的輸出: -
first callback-Result- 11
second callback--Result- undefined
third callback--Result- 44
value of diff--- 3
爲什麼沒有第二個回調等待差函數返回。我認爲這是Promise庫同步代碼的主要特點。
是的,它是有點。但setTimeout是一個異步調用以及 –
看@GrégoryNEUT的答案。事實上,當你在超時返回時,你不會返回diff函數。這同樣適用於,例如'map'方法。函數x(){ array.map(function(el){return el}); }' 當調用'x()'時,它不會返回列表中的第一個元素。 – SBylemans