如何拒绝我没有创建的承诺?

How to reject a promise i did not create?

这里的承诺还很陌生,我想知道..

查看 bluebird 处理承诺的包后:

我一直想知道如何使用已经创建承诺的包来实现拒绝提出 catch 承诺的相同效果,而我只是使用他们的 .then 链?

我的意思是,在我的创建解析器上使用 reject 最终会向此函数的用户提出 catch

如果我没有解析器,我怎么能提出 catch。如下链接承诺:

function doSomthing(): Promise<someValue>
    return somePackage.someMethodWithPromise().then((result)=> {
        return someValueToTheNextThen;
    })
}

我看到一些包实现它的唯一方法是返回一个 { errors, result } 对象,以便下一个 then 可以检查是否有任何错误并对其做出反应,但我想要提出一个 catch 而不是检查我拥有的每个 then 中的错误..

希望我说清楚了,如果有任何遗漏,请告诉我。

在此先感谢您的帮助!

.then return 也是一个 Promise。如果您确定存在错误,您可以简单地创建一个被拒绝的承诺并 return 从那里创建它。

return somePackage.someMethodWithPromise().then(result => {
  if (result.erroneous()) return Promise.reject('erroneous data');
  return someValueToTheNextThen;
})

您也可以简单地从 then 中选择 throw anError;,这也会被捕获在 catch 块中。

就像在同步代码中一样,您可以通过抛出错误来实现。当您使用承诺并且已经在 then 链中时,这是惯用的做法:

function doSomething(): Promise<someValue>
    return somePackage.someMethodWithPromise().then((result)=> {
        if (badResult(result)) { 
            throw new Error('Bad result!'); 
        }

        return someValueToTheNextThen;
    })
}


doSomething()
    .then(result => {
        // this will get skipped if an error was thrown
    })
    .catch(error => {
        // error will be caught here if one was thrown
        console.error(error);
    });