在延迟对象解析后执行 Thenable 函数

Execute Thenable Functions after Deferred Object Resolves

函数返回 Deferred.promise() 之后返回 promise 的函数怎么会是 运行?

我在 JSFiddle 上有一个问题的例子。警报消息旨在以 "executed third?" 结尾,而不是显示在 "executed first?" 和 "executed second?" 警报消息中间的警报。

此外,为什么 JSFiddle 中的示例代码无法按预期顺序执行?

Promise 按 return 值 工作。如果您不从 then 中选择 return,则 promise 无法知道它应该在后续的 then 中等待该值。

当你这样做时:

login()
.then(function() {
    getGuIdFromUser(); // return undefined implicit
})
.then(function() {
    getUserData('val'); // return undefined implicit
});

库无法等待值,因为 undefined 是隐式 returned。如果您添加 returns 它有效:

login()
.then(function() {
    return getGuIdFromUser();
})
.then(function() {
    return getUserData('val');
});

请注意,$.getJSON 已经 return 是一个承诺,因此无需将其包装在 $.Deferred 中。