当我的承诺没有错误时,我想继续执行代码,但是如果有任何错误,我不想继续。如何优雅地处理这种情况?
。
/* 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()
)。