gpt4 book ai didi

javascript - 在 Express.js 中停止执行 Sequelize promise

转载 作者:IT老高 更新时间:2023-10-28 23:26:23 24 4
gpt4 key购买 nike

我对 Promise 的世界很陌生,我不确定我是否完全理解在某些情况下如何使用它们。

Sequelize 最近添加了对 Promise 的支持,这确实使我的代码更具可读性。一个典型的场景是避免在无限回调中多次处理错误。

下面的代码片段总是返回 204,而我希望它在找不到照片时返回 404

有没有办法告诉 Sequelize 在发送 404 后“停止” promise 链的执行?请注意,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);
});

当然,这个例子很简单,可以很容易地用回调来编写。但在大多数情况下,代码可能会变得更长。

最佳答案

您的 promise 链不一定是线性的。您可以“分支”并为成功案例创建一个单独的 promise 链,根据需要链接尽可能多的 .then(),同时为成功案例创建一个单独的(较短的) promise 链失败案例。

从概念上讲,它看起来像这样:

         Photo.find
/ \
/ \
(success) (failure)
/ \
/ \
photo.destroy res.send(404)
|
|
res.send(204)

在实际的代码中,它看起来像这样:

// 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);
});

关于javascript - 在 Express.js 中停止执行 Sequelize promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24091661/

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