Ped*_*dro 9 javascript node.js express sequelize.js
我是承诺世界的新手,我不确定我是否完全理解在某些情况下如何使用它们.
Sequelize最近添加了支持承诺,这确实使我的代码更具可读性.典型的情况是避免在无限回调中多次处理错误.下面的代码总是返回,204
而我希望它404
无法找到照片时返回.
有没有办法告诉Sequelize在发送404后"停止"执行承诺链?请注意,它res.send
是异步的,因此不会停止执行.
// Find the original photo
Photo.find(req.params.id).then(function (photo) {
if (photo) {
// Delete the photo in the db
return photo.destroy();
} else {
res.send(404);
// HOW TO STOP PROMISE CHAIN HERE?
}
}).then(function () {
res.send(204);
}).catch(function (error) {
res.send(500, error);
});
Run Code Online (Sandbox Code Playgroud)
当然这个例子很简单,很容易用回调写.但在大多数情况下,代码可能变得更长.
您的承诺链不一定必须是线性的.您可以"分支"并为成功案例创建单独的承诺链,根据.then()
需要链接尽可能多的承诺链,同时为失败案例设置单独的(更短的)承诺链.
从概念上讲,这看起来像这样:
Photo.find
/ \
/ \
(success) (failure)
/ \
/ \
photo.destroy res.send(404)
|
|
res.send(204)
Run Code Online (Sandbox Code Playgroud)
在实际代码中,看起来像这样:
// Find the original photo
Photo.find(req.params.id).then(function (photo) {
if (photo) {
// Delete the photo in the db
return photo.destroy().then(function () {
res.send(204);
});
} else {
res.send(404);
}
}).catch(function (error) {
res.send(500, error);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3952 次 |
最近记录: |