promise的结果处理函数的执行顺序

海姼
  • 4
新手上路,请多包涵

看了阮一峰老师的文档里面提到:调用resolve或reject并不会终结 Promise 的参数函数的执行。

new Promise((resolve, reject) => {
  resolve(1);
  console.log(2);
}).then(r => {
  console.log(r);
});
// 2
// 1

查了一些资料知道了宏任务和微任务在执行顺序上有区别,但是又提到了另外一种情况,如果 Promise 状态已经变成resolved,再抛出错误是无效的。

const promise = new Promise(function(resolve, reject) {
  resolve('ok');
  throw new Error('test');
});
promise
  .then(function(value) { console.log(value) })
  .catch(function(error) { console.log(error) });
// ok

这里就有点疑惑,难道抛出错误throw error是异步的?里面没有详细的描述,其他一些资料也只是给了这个结论,没有做阐述。

回复
阅读 590
1 个回答

这个是 Promise/A+ 规范的中文翻译,可以看下,然后可以对比下你的问题

宣传栏