2013/09/11

减少异步嵌套,Express-promise

请甄别文章的时效性。

这篇文章最后更新于 8 年前 ,其中所记录的信息可能已经不再合理或有效。如有任何建议,欢迎与我联系

在使用 在使用 Express 框架开发网站或 API 时,经常会因为 Node.js 的异步流程造成逻辑代码中嵌套回调函数过多的问题。这时可以考虑使用 Promise 来简化这个流程。关于 Promise 可以参考以下资料: http://www.infoq.com/cn/news/2011/09/js-promise http://martinfowler.com/bliki/JavascriptPromise.html

现在 Node.js 很多 ORM/ODM 都通过 Promise 来返回查询、执行结果,而普通的 Node.js 风格回调函数可以很容易的转换成 Promise。

为此,我为 Express 框架开发了一个 middleware 用来更方便地使用 Promise。

例如,我们可能会经常写出如下代码:

app.get("/users/:userId", function (req, res) {
  User.find(req.params.userId).then(function (user) {
    Project.getMemo(req.params.userId).then(function (memo) {
      res.json({
        user: user,
        memo: memo,
      });
    });
  });
});

而使用 express-promise 后,上面的代码可以改写成:

app.get("/users/:userId", function (req, res) {
  res.json({
    user: User.find(req.params.userId),
    memo: Project.getMemo(req.params.userId),
  });
});
更多实例可以见项目主页: https://github.com/luin/express-promise

项目同样对 Mongoose 的 Query 对象提供了额外的支持。