关于手写promise的问题

image.png

这个是在学习promise实现过程中找到的一份资料
在实现promise内部的resolve和reject方法时候,注意到这两个函数内的代码都被settimeout包起来了,讲解说了一句 为了保证函数执行顺序
不太清楚这样做的原因,是保证什么函数执行的先后顺序?
为什么resolve和reject里的代码要异步执行?
谢谢了!

阅读 2.4k
3 个回答

为什么要reslove和reject要异步执行的原因,可以换个角度来看,同步执行reslove和reject会有什么问题,假如有代码:

var promise = (function () {
   var promise = new Promise();
   promise.resolve();
   // 如果是同步执行的话,此处不等执行return返回promise对象。就会遍历回调resolveCallbacks数组了。此时这个数组还没有添加任何回调函数。
   return promise;
})();

// 所以一下代码会执行,但不会被调用。也就无法从外部控制处理过程promise就失去了它存在的意义
promise.then(function(){
    // TODO Something
});

虽然以上代码再同步函数中调用会存在问题,但是再异步函数中调用resolve和reject是正常的,所以总结如下:reject和resolve之所以使用异步执行回调,是为了兼容 【异步场景】 和 【同步场景】下的应用。

你应该了解下Promise/A+规范,然后再换个源码阅读,如es6-promise。

你看的资料写法可能有问题(为了严谨性,只说可能,因为我不清楚具体资料内容),最起码resolve和reject里需要返回值才能链式调用

简单理解,就是为了模拟异步调用,因为 Promise 是异步的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题