在下面的代码中:

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
});

reject api使用p2(在Promise中)与使用p1抛出错误(在throw中)之间有什么区别吗?

完全一样吗?

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

最佳答案



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

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



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

另外,如果您使用throw错误对象,则引擎可能会提供不同的异常调试信息。

对于您的特定示例,您正确地认为p1p2与外界是无法区分的。

关于javascript - promise 构造函数拒绝调用与抛出错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28703241/

10-12 22:34