Javascript 承诺构造函数中的错误处理
Promise构造函数中错误处理的最佳实践是什么 承诺具有在承诺链中传播错误的巨大优势,错误无法逃脱,但是当涉及到承诺构造函数时,您必须手动处理可能的错误 让我举一个例子:Javascript 承诺构造函数中的错误处理,javascript,promise,Javascript,Promise,Promise构造函数中错误处理的最佳实践是什么 承诺具有在承诺链中传播错误的巨大优势,错误无法逃脱,但是当涉及到承诺构造函数时,您必须手动处理可能的错误 让我举一个例子: new Promise(resolve => { throw new Error('error in the constructor'); resolve(); }); 当上述代码运行时,承诺永远不会得到解决(或拒绝),因此我无法处理承诺链中的错误。 现在一个显而易见的解决方案是: new Promi
new Promise(resolve => {
throw new Error('error in the constructor');
resolve();
});
当上述代码运行时,承诺永远不会得到解决(或拒绝),因此我无法处理承诺链中的错误。
现在一个显而易见的解决方案是:
new Promise((resolve, reject) => {
try {
throw new Error('error in the constructor');
resolve();
} catch(error) {
reject(error)
}
});
但是,对于我来说,在构造函数中始终执行这种手动错误检查似乎有点过分了,同时,例如在Promise的then
方法中,我不需要这样做
因此,例如,以下解决方案执行相同的操作,但没有手动错误处理:
Promise.resolve()
.then(() => {
throw new Error('error in the constructor');
});
所以我的问题是,在Promise构造函数中有更好的错误处理方法吗?或者我应该使用最后一个例子,在我看来,它更干净
对于Promise构造函数,您必须手动处理可能的错误。[…]
当上述代码运行时,承诺永远不会得到解决(或拒绝) 你误会了。在任何符合ES6的
Promise
实现中,当您从新Promise
构造函数的解析器回调中(同步)抛出异常时,该承诺将被拒绝。这个抛出
-安全性是一个令人信服的论据
对于Promise构造函数,您必须手动处理可能的错误。
[…]
当上述代码运行时,承诺永远不会得到解决(或拒绝)
你误会了。在任何符合ES6的Promise
实现中,当您从新Promise
构造函数的解析器回调中(同步)抛出异常时,该承诺将被拒绝。这个throw
-安全性是一个引人注目的参数。你确定throw
不在异步回调内吗?你在使用什么承诺库?你确定throw
不在异步回调内吗?你在使用什么承诺库?哦,然后我再次检查我的代码,并试图找出问题所在。你是对的:)我的代码中有一个不同的问题,我认为Promise构造函数是负责的,但没有。谢谢!哦,然后我再次检查了我的代码,并试图找出问题所在。你是对的:)我的代码中有一个不同的问题,我认为Promise构造函数是负责的,但是没有。谢谢!