Nodejs异步混淆

mno*_*rt9 4 asynchronous node.js

我似乎无法掌握如何使用NodeJ维护异步控制流.在我看来,所有嵌套都使得代码很难阅读.我是新手,所以我可能错过了大局.

简单编码这样的东西有什么问题......

function first() {
    var object = {
        aProperty: 'stuff',
        anArray: ['html', 'html'];
    };
    second(object);
}

function second(object) {
    for (var i = 0; i < object.anArray.length; i++) {
        third(object.anArray[i]);
    };
}

function third(html) {
    // Parse html
}
first();
Run Code Online (Sandbox Code Playgroud)

Mic*_*ley 7

"全局"是任何I/O都是非阻塞的,并且在JavaScript中异步执行; 因此,如果您进行任何数据库查找,从套接字(例如在HTTP服务器中)读取数据,读取或写入磁盘等文件,则必须使用异步代码.这是必要的,因为事件循环是单个线程,如果I/O不是非阻塞,则程序在执行时会暂停.

可以构建代码,以便嵌套更少; 例如:

var fs = require('fs');
var mysql = require('some_mysql_library');

fs.readFile('/my/file.txt', 'utf8', processFile);

function processFile(err, data) {
  mysql.query("INSERT INTO tbl SET txt = '" + data + "'", doneWithSql);
}

function doneWithSql(err, results) {
  if(err) {
    console.log("There was a problem with your query");
  } else {
    console.log("The query was successful.");
  }
}
Run Code Online (Sandbox Code Playgroud)

还有像async(我个人选择)这样的流量控制库,可以帮助避免大量的嵌套回调.

您可能对我在此主题上创建的截屏视频感兴趣.