一尘不染

承诺构造函数拒绝调用与抛出错误

javascript

在下面的代码中:

var p1 = new Promise(function (resolve, reject) {
    throw 'test1';
});

var p2 = new Promise(function (resolve, reject) {
    reject('test2');
});

p1.catch(function (err) {
    console.log(err); // test1
});

p2.catch(function (err) {
    console.log(err); // test2
});

从api 使用reject(in p2Promise和使用抛出错误(in p1)有什么区别throw

完全一样吗?

如果相同,为什么我们需要reject回调呢?


阅读 263

收藏
2020-05-01

共1个答案

一尘不染

从api 使用reject(in p2Promise和使用抛出错误(in p1)有什么区别throw

是的,当是回调时,您不能throw异步使用reject。例如,一些超时:

new Promise(_, reject) {
    setTimeout(reject, 1000);
});

完全一样吗?

不,至少在您的语句后面跟随其他代码时才不会。throw立即完成解析程序功能,同时调用reject继续正常执行-在“标记”了承诺被拒绝之后。

此外,如果您throw出错了,引擎可能会提供不同的异常调试信息。

对于您的特定示例,您是正确的,p1并且p2与外部没有区别。

2020-05-01