什么时候调用 Promise.then() 钩子?
When Promise.then() hooks are called?
我观察到 Firefox 的承诺推迟了完整性通知。以下断言失败,因为调用 onFullfilled() 太晚了*.
var resolved = false;
function onFullfilled() {
resolved = true;
log("Completed");
}
Promise.resolve(true).then(onFullfilled);
assert(resolved, "Promise completed promise should call resolution hook immediately.");
何时保证在 Promise 解析时调用 onFullfilled()?
* 在我的例子中 "Completed" 在测试框架报告断言失败后出现日志消息。
Promise 解析挂钩总是 在 所有同步代码执行后调用。这是设计使然 - 这样做是为了防止竞争条件。
由于 promises 有时会异步解析规范要求,因此它们 总是 异步解析,因此执行相同的代码路径。承诺守护你against Zalgo.
onFulfilled or onRejected must not be called until the execution context stack contains only platform code.
许多测试框架 - 即 Mocha 支持直接使用 promise 语法测试 promise - 通过返回 promise。
it("does something", function(){
return aPromise; // if aPromise resolves the test passes
})
你应该总是给"then"一个函数。所以你应该使用 "onFullfilled()" 而不是 "onFullfilled" 作为 "then".
的参数
所以它应该是这样的:
Promise.resolve(true).then(onFullfilled());
我观察到 Firefox 的承诺推迟了完整性通知。以下断言失败,因为调用 onFullfilled() 太晚了*.
var resolved = false;
function onFullfilled() {
resolved = true;
log("Completed");
}
Promise.resolve(true).then(onFullfilled);
assert(resolved, "Promise completed promise should call resolution hook immediately.");
何时保证在 Promise 解析时调用 onFullfilled()?
* 在我的例子中 "Completed" 在测试框架报告断言失败后出现日志消息。
Promise 解析挂钩总是 在 所有同步代码执行后调用。这是设计使然 - 这样做是为了防止竞争条件。
由于 promises 有时会异步解析规范要求,因此它们 总是 异步解析,因此执行相同的代码路径。承诺守护你against Zalgo.
onFulfilled or onRejected must not be called until the execution context stack contains only platform code.
许多测试框架 - 即 Mocha 支持直接使用 promise 语法测试 promise - 通过返回 promise。
it("does something", function(){
return aPromise; // if aPromise resolves the test passes
})
你应该总是给"then"一个函数。所以你应该使用 "onFullfilled()" 而不是 "onFullfilled" 作为 "then".
的参数所以它应该是这样的:
Promise.resolve(true).then(onFullfilled());