如何避免与mongoose/节点的深层嵌套代码?

我正在尝试提高使用大量mongooose的biggish nodejs应用程序的可读性。 问题是,有很多依赖查询的callback失控。

处理这个问题的做法是什么?

您的问题有三种常见的解决scheme。

首先是async.js库。

第二个是使用承诺。 node.js中有多个promise的实现。 我知道三个实现:

  • 节点承诺
  • 发誓
  • Q承诺

第三个是使用纤维 。 有纤维承诺图书馆,为您做所有棘手的工作。

之前有很多类似的问题。 例如, 检查这一个 。

所有这些库都做同样的事情 – 他们使node.jsasynchronous代码漂亮和可读。 所以,只要选一个看起来比较简单的。

至于我,我更喜欢async.js库。

更新: mongoose.js拥有自己的内置诺言–mpromise 。 你可以用mongoose.promise来访问它。 但是,只要你在mongoose的查询上调用exec()函数,它就会返回一个承诺。 除了REPL ,我从来没有真正使用过mongoose.js promise,但是你可以试试看。