繁体   English   中英

停止在Express.js中执行Sequelize承诺

[英]Stop execution of a Sequelize promise in Express.js

我是承诺世界的新手,我不确定我是否完全理解在某些情况下如何使用它们。

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

下面的片段总是返回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);
});

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM