Javascript “写作”;“封锁”;nodejs中的代码

Javascript “写作”;“封锁”;nodejs中的代码,javascript,node.js,Javascript,Node.js,nodejs中的所有东西都是非阻塞的,这很好,但是我如何才能在没有大量嵌套回调列表的情况下创建一个接一个的函数all呢? 它是“一个用于node.JS的简单控制流库,使并行执行、串行执行和错误处理变得毫不费力”。您真正想做的是找出操作阻塞的原因,并对其重新编码,使其不阻塞。删除彼此之间的依赖关系。您需要改变思考非阻塞IO的方式 使用库允许您以同步阻塞的方式运行此类型代码,这只是一个糟糕的支撑 学习如何在node.js中编写非阻塞代码会让您受益匪浅,因为这正是node.js的设计初衷 您不必嵌套回

nodejs中的所有东西都是非阻塞的,这很好,但是我如何才能在没有大量嵌套回调列表的情况下创建一个接一个的函数all呢?


它是“一个用于node.JS的简单控制流库,使并行执行、串行执行和错误处理变得毫不费力”。

您真正想做的是找出操作阻塞的原因,并对其重新编码,使其不阻塞。删除彼此之间的依赖关系。您需要改变思考非阻塞IO的方式

使用库允许您以同步阻塞的方式运行此类型代码,这只是一个糟糕的支撑


学习如何在node.js中编写非阻塞代码会让您受益匪浅,因为这正是node.js的设计初衷

您不必嵌套回调

在编写异步代码时有许多模式

例如,这个矩阵嵌套样式

database.find('foo', function (err, data) {
  database.update('foo', 'bar', function (err, data) {
    database.delete('bar', function (err, data) {
      console.log(data);
    });
  });
});
。。。可以以更清晰(但更详细)的方式重写:

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

是一个特别好的解决方案-使用它可以产生更干净的异步代码,嵌套也更浅。您可以通过以下途径获得:

npm install async --save
特别是看看:

  • async.series:这使您可以设置一个函数列表,以逐个运行—其中列表中的每个函数仅在完成之前的函数之后运行。但是,其他代码(在定义的系列之外)可以在不阻塞的情况下运行
  • async.series:这与async.series类似,只是列表中的每个函数都将其结果传递给列表中的下一个函数,最后的结果传递给在末尾定义的回调函数
然而,所有这些都非常有助于避免庞大的嵌套回调列表


另外,如果有帮助的话,在学习库时,它包含一组示例,包括一个用于async.瀑布的示例和另一个用于async.series的示例(打开控制台查看它在做什么)。

+1这是一个答案,尽管简洁,但我可能会指出整个控制流库列表@Chetan:a link很好,但是你不需要点击一个链接来了解你的意思。这里应该有一个链接的简洁描述谢谢你的评论,我在answer中添加了一个描述。Node.js用于非阻塞代码。你违背了流程,并试图阻止它,从而破坏了它存在的目的。我成功使用的模式是使用Promise库,如BlueBird:和我使用的模式(如masylum所说)是下面文章中“菜鸟错误1”中建议的模式:
npm install async --save
use ES6 async and await method's for writing blocking code
====================================================================
Ex: 
  async function fName(){
   lat firstResult=await task1;
   let secondResult= await task2
}

function task1(){
   //write your logic and after finishing your task return result as a PROMISE
return new Promise((reslove,reject)=>{
   // write logic hear after reslove(success) or reject(error)
})
}

function task2(){
   //write your logic and after finishing your task return result as a PROMISE
return new Promise((reslove,reject)=>{
   // write logic hear after reslove(success) or reject(error)
})
};