在延迟对象解析后执行 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
中。
函数返回 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
中。