Mic*_* P. 7 javascript promise ecmascript-6
我是使用 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);
});
};
Run Code Online (Sandbox Code Playgroud)
就像 @bugwheels94 提到的那样,您可以从内部返回您的 Promise ,并在前一个 .promise 之外.then添加另一个 Promise 。另外,可以采用 2 个参数 - 第二个参数用于捕获错误。用语言解释有点困难,所以这里有一个例子。.then.then.then
poll.pollForCandidates()
.then((candidates) => {
let clientId = candidates[0].clientId;
return poll.getUnprocessedCandidates({context, clientId, candidates})
.then((unprocessedCandidates) => {
console.log(unprocessedCandidates);
return poll.addCandidatesToQueue(context, unprocessedCandidates)
}, (error) => {
console.log(error);
})
.then((processedCandidates) => {
console.log(processedCandidates);
return poll.addCandidatesToTable(processedCandidates)
}, (error) => {
console.log(error);
})
.then((result) => {
console.log(result);
}), (error) => {
console.log(error);
});
})
.catch((error) => {
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
编辑:@jfriend00 提出了有关使用所有这些.catch方法的好消息。.catch以下是链末尾有一个单一的代码的样子。
poll.pollForCandidates()
.then((candidates) => {
let clientId = candidates[0].clientId;
return poll.getUnprocessedCandidates({context, clientId, candidates})
.then((unprocessedCandidates) => {
console.log(unprocessedCandidates);
return poll.addCandidatesToQueue(context, unprocessedCandidates)
})
.then((processedCandidates) => {
console.log(processedCandidates);
return poll.addCandidatesToTable(processedCandidates)
})
.then((result) => {
console.log(result);
});
})
.catch((error) => {
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
编辑 2:删除这些额外的console.log语句可以让你变得更干净。
poll.pollForCandidates()
.then((candidates) => {
let clientId = candidates[0].clientId;
return poll.getUnprocessedCandidates({context, clientId, candidates})
.then(unprocessedCandidates => poll.addCandidatesToQueue(context, unprocessedCandidates))
.then(poll.addCandidatesToTable)
.then((result) => {
console.log(result);
});
})
.catch((error) => {
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2711 次 |
| 最近记录: |