尝试使用 Bookshelf.js 清理 Node.js 中的嵌套 Promise 链
Trying to cleanup a Nested Promise Chain in Node.js with Bookshelf.js
我的代码如下所示:
return request.app.currentProject().then(function(project) {
return project.prs().query({
where: {id: request.params.prId}
}).fetchOne().then(function(pr) {
if (!pr) { return reply(Boom.notFound()); }
pr.destroy().then(function(model) {
return reply().code(204);
}).catch(function(err) {
return reply(Boom.badRequest(err));
});
}).catch(function(err) {
return reply(Boom.badRequest(err));
});
}).catch(function(err) {
return reply(Boom.badRequest(err));
});
现在,在上面的代码中,我必须单独捕获每个承诺。有没有办法将它们链接起来,这样错误就可以冒出来,而不必单独捕获每个 promise?
更新
return request.app.currentProject().then(function(project) {
return project.prs().query({
where: {id: request.params.prId}
}).fetchOne();
}).then(function(pr) {
return pr.destroy();
}).catch(function(err) {
return reply(Boom.badRequest(err));
});
Promise 错误会自动冒出;你什么都不用做。
只需删除链末尾以外的所有错误处理程序。
有关错误处理的更详细指南,请参阅 my blog。
我的代码如下所示:
return request.app.currentProject().then(function(project) {
return project.prs().query({
where: {id: request.params.prId}
}).fetchOne().then(function(pr) {
if (!pr) { return reply(Boom.notFound()); }
pr.destroy().then(function(model) {
return reply().code(204);
}).catch(function(err) {
return reply(Boom.badRequest(err));
});
}).catch(function(err) {
return reply(Boom.badRequest(err));
});
}).catch(function(err) {
return reply(Boom.badRequest(err));
});
现在,在上面的代码中,我必须单独捕获每个承诺。有没有办法将它们链接起来,这样错误就可以冒出来,而不必单独捕获每个 promise?
更新
return request.app.currentProject().then(function(project) {
return project.prs().query({
where: {id: request.params.prId}
}).fetchOne();
}).then(function(pr) {
return pr.destroy();
}).catch(function(err) {
return reply(Boom.badRequest(err));
});
Promise 错误会自动冒出;你什么都不用做。
只需删除链末尾以外的所有错误处理程序。
有关错误处理的更详细指南,请参阅 my blog。