延迟绑定的promise ?WHY

366 阅读1分钟

我想知道为什么promise需要成为异步

之前一直以为是实现上不允许,但我发现并不是这样的

当尝试把resolve触发回调的方式改成同步的,再使用promises-aplus-tests做测试,872个case仅仅失败了3个,这很大程度上说明了异步本身并不是必须的。所以为什么promiseA+规范要求onfulfilled must be called after a delay

打开《你不知道的JavaScript》,在175页 找到了答案:

人们用虚构的十分疯狂的恶魔Zalgo来描述无法被预测异步/同步的代码行为。一条非常有效的建议是,永远异步调用回调。

Designing APIS for Asynchrony 中也给出了很直观的例子

var after = false;
callbackTaker(function() {
  alert(after === true);
});
after = true;

我们不知道callbackTaker会同步还是异步地执行传入的函数

所以将来alert的结果究竟是true or false ?这样的情况不是我们想要的。所以,请永远异步调用回调,不要放出Zalgo恶魔!

我想这就是问题的答案,问题很简单,但可算有了答案