gpt4 book ai didi

javascript - 在嵌套 promise 链中捕获错误的更简洁方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:33 24 4
gpt4 key购买 nike

我是 promise 的新手,我注意到,为了捕获嵌套 promise 链中的错误,我需要对链中的每个 promise 调用 catch 方法。有没有更简洁的方式来写这个?

      poll.pollForCandidates().then((candidates) => {
let clientId = candidates[0].clientId;
poll.getUnprocessedCandidates({context, clientId, candidates})
.then((unprocessedCandidates) => {
console.log(unprocessedCandidates);
poll.addCandidatesToQueue(context, unprocessedCandidates)
.then((processedCandidates) => {
console.log(processedCandidates);
poll.addCandidatesToTable(processedCandidates)
.then((result) => {
console.log(result);
})
.catch((error) => {
console.log(error);
});
})
.catch((error) => {
console.log(error);
})
})
.catch((error) => {
console.log(error);
})
})
.catch(() => {
console.done(error);
});
};

最佳答案

这是最短的方法:

poll.pollForCandidates()
.then((candidates) => poll.getUnprocessedCandidates({ context, candidates[0].clientId, candidates }))
.then((unprocessedCandidates) => poll.addCandidatesToQueue(context, unprocessedCandidates))
.then((processedCandidates) => poll.addCandidatesToTable(processedCandidates))
.then(console.log)
.catch(console.error);

解释:

这称为组合 promise ,它是 promise 的强大超能力之一。每个函数只会在前一个 promise 已解决时调用,并且会使用该 promise 的输出进行调用。

在 then 函数中你可以做三件事:

  1. 返回另一个 promise
  2. 返回一个同步值(或未定义的)
  3. 抛出同步错误

在上面的示例中,我们返回了一个 promise ,因此我们可以使用 .then 来继续组合 promise

最后,console.log 得到结果并用它调用console.log。 (与 console.error 相同)

就是这样。一旦理解了这个技巧,您就理解了 promise 。

您可以在这里继续阅读: We have a problem with promises - By: Nolan Lawson

关于javascript - 在嵌套 promise 链中捕获错误的更简洁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45003380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com