我观察到在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()吗?
*在我的情况下"已完成"测试框架报告断言失败后出现日志消息。
答案 0 :(得分:3)
承诺解析挂钩总是称为。这是设计 - 并且是为了防止竞争条件。
由于promises有时会异步解析,因此规范要求它们始终异步解析,因此执行相同的代码路径。承诺保护你against Zalgo。
在执行上下文堆栈仅包含平台代码之前,不得调用onPulfilled或onRejected。
许多测试框架 - 即Mocha支持测试直接承诺 - 承诺语法 - 通过返回一个承诺。
it("does something", function(){
return aPromise; // if aPromise resolves the test passes
})
答案 1 :(得分:-2)
你应该总是给"然后"一个功能。所以你应该使用" onFullfilled()"而不是" onFullfilled"作为"的参数"。
所以应该是这样的:
Promise.resolve(真)。然后(onFullfilled());