看了阮一峰老师的文档里面提到:调用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是异步的?里面没有详细的描述,其他一些资料也只是给了这个结论,没有做阐述。
这个是 Promise/A+ 规范的中文翻译,可以看下,然后可以对比下你的问题