如何使用'.抓住承诺



当我的承诺没有错误时,我想继续执行代码,但是如果有任何错误,我不想继续。如何优雅地处理这种情况?

/* start of REST call */
const resultA = fetchThings()
.then(things => returnSomeResult(things))
.then(...)
...
.catch(err => throw err);  // cannot proceed computation if there is error

const resultB = fetchOtherThings()
.then(otherTings => returnOtherResult(otherThings))
.then(...)
...
.catch(err => throw err); // cannot proceed if there is error
const resultC = Promise.all([resultA, resultB]) => { // do other stuff }
// return resultC from REST call if successful

当任何一个结果发生错误时,我在终端上得到一个UnhandledPromiseRejectionWarning。它表示This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with a .catch()。我怀疑这是因为我在catch块中抛出了错误。

但是,当resultA或resultB出现错误时,我不希望代码继续执行。

我怎样才能更好地处理我的这种情况?

我的猜测是你没有处理由Promise.all()抛出的错误,如果它处理的任何承诺将被拒绝,它将被拒绝。

所以你也需要在这里捕获错误:

Promise.all(…).then(…).catch(e => …)

FWIW,你的catch()是多余的:

.catch(err => throw err)

你正在捕获被抛出的错误并重新抛出它们,这是不必要的(它们将被.catch()捕获,你将附加到Promise.all())。

相关内容

  • 没有找到相关文章

最新更新