在下面的代码中:
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 p2)Promise和使用抛出错误(in p1)有什么区别throw?
reject
p2
Promise
p1
throw
完全一样吗?
如果相同,为什么我们需要reject回调呢?
是的,当是回调时,您不能throw异步使用reject。例如,一些超时:
new Promise(_, reject) { setTimeout(reject, 1000); });
不,至少在您的语句后面跟随其他代码时才不会。throw立即完成解析程序功能,同时调用reject继续正常执行-在“标记”了承诺被拒绝之后。
此外,如果您throw出错了,引擎可能会提供不同的异常调试信息。
对于您的特定示例,您是正确的,p1并且p2与外部没有区别。