在nodejs中编写"阻塞"代码

Ada*_*amB 18 javascript node.js

nodejs中的所有内容都是非阻塞的,这很好,但是如何在不拥有庞大的嵌套回调列表的情况下创建必须一个接一个的函数alls?

mas*_*lum 12

你不必窝的回调.

编写异步代码有很多模式.

例如,这种matrioska嵌套式......

database.find('foo', function (err, data) {
  database.update('foo', 'bar', function (err, data) {
    database.delete('bar', function (err, data) {
      console.log(data);
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

...可以用更干净(但更详细)的方式重写:

var onDelete = function (err, data) {
      console.log(data);
    },

    onUpdate = function (err, data) {
      database.delete('bar', onDelete);
    },

    onFind = function (err, data) {
      database.update('foo', 'bar', onUpdate);
    };

database.find('foo', onFind);
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用模块来抽象回调的串行和并行执行.


Che*_*tan 8

使用 步骤.

它是"node.JS的一个简单的控制流程库,可以使并行执行,串行执行和错误处理无痛".

  • +1这是一个答案,虽然简洁,但我可能会指向整个控制流库列表https://github.com/joyent/node/wiki/modules#wiki-async-flow (5认同)
  • @Chetan:链接很好,但你不需要点击链接就知道你的意思了.链接的简洁描述应该在这里 (3认同)
  • 感谢您的评论,我在答案中添加了说明. (2认同)