Javascript 承诺构造函数中的错误处理

Javascript 承诺构造函数中的错误处理,javascript,promise,Javascript,Promise,Promise构造函数中错误处理的最佳实践是什么 承诺具有在承诺链中传播错误的巨大优势,错误无法逃脱,但是当涉及到承诺构造函数时,您必须手动处理可能的错误 让我举一个例子: new Promise(resolve => { throw new Error('error in the constructor'); resolve(); }); 当上述代码运行时,承诺永远不会得到解决(或拒绝),因此我无法处理承诺链中的错误。 现在一个显而易见的解决方案是: new Promi

Promise构造函数中错误处理的最佳实践是什么

承诺具有在承诺链中传播错误的巨大优势,错误无法逃脱,但是当涉及到承诺构造函数时,您必须手动处理可能的错误

让我举一个例子:

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构造函数是负责的,但是没有。谢谢!