如何在函数返回Deferred.promise()
之后运行一个返回promise的函数?
我在JSFiddle上有一个问题的例子。警报消息旨在以“执行第三个?”结束。而不是在“执行第一次”的中间显示警报?并“执行第二次?”警报信息。
另外,为什么JSFiddle的示例代码无法按预期顺序执行?
答案 0 :(得分:2)
承诺通过返回值来工作。如果您没有从then
返回,则承诺无法知道它应该在后续then
中等待该值。
当你这样做时:
login()
.then(function() {
getGuIdFromUser(); // return undefined implicit
})
.then(function() {
getUserData('val'); // return undefined implicit
});
由于隐式返回undefined
,因此库无法等待该值。如果您添加退货,则可以:
login()
.then(function() {
return getGuIdFromUser();
})
.then(function() {
return getUserData('val');
});
请注意$.getJSON
已经返回一个承诺,因此无需将其包装在$.Deferred
中。