nodejs中的回调函数+异步?
发布于 11 年前 作者 ilolita 14518 次浏览 最后一次编辑是 8 年前

刚开始接触nodejs,对于nodejs中的函数返回值没弄明白~~ 假设 A是从文件中读取数据 B从数据库读出数据 C把A、B得到的数据整合进行过滤 D过滤过的数据写入数据库, 是用callback返回A的数据,然后再依次传下去么…… 现在用的async的waterfall来写的,可以直接传递,但是感觉这样就是顺序执行的,但是A和B又是并发执行的。对于nodejs中一个函数调用另一个函数的返回值,是不是用callback呢?

7 回复

嗯,就是通过callback的值不断往下传对吧,你给的书中没看到相关内容 现在有下面这种情况, async.auto({ func1: function (callback, results) { callback(null, “abc”, “bbc”); },

func2: function (callback, results) { 
    console.log("Print#1:\n" + util.inspect(results)); 
    callback(null, { "puncha": "during" }); 
}, 
func3: ["func2", function (callback, results) { 
    //调用2的返回值…………
    //判断是否符合条件,再从头执行fun1、fun2、fun3
    callback(null, 3); 
}]

});
在fun3中“//判断是否符合条件,再从头执行fun1、fun2、fun3”,这个应该怎么来写呢,一直纠结在这个循环上,不知道怎么写,没有思路,谢谢啦

@iLolita see async document, very easy , only wrap grammar.

my ebook content is how develop web framework and use.


签名: 交流群244728015 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3

这种情况用 async.parallel

async.parallel([ function(callback){ setTimeout(function(){ callback(null, ‘one’); }, 200); }, function(callback){ setTimeout(function(){ callback(null, ‘two’); }, 100); } ], // optional callback function(err, results){ // the results array will equal [‘one’,‘two’] even though // the second function had a shorter timeout. });

https://github.com/caolan/async#parallel

除了async,你也可以选用eventproxy,学习成本低很多,代码可读性在你这个功能的实现上,相对也高一些。

用async.auto也可以吧,现在用的async.auto. 然后有下面这种情况, async.auto({ func1: function (callback, results) { callback(null, “abc”, “bbc”); },

func2: function (callback, results) { console.log(“Print#1:\n” + util.inspect(results)); callback(null, { “puncha”: “during” }); }, func3: [“func2”, function (callback, results) { //调用2的返回值………… //判断是否符合条件,再从头执行fun1、fun2、fun3 callback(null, 3); }] }); 在fun3中“//判断是否符合条件,再从头执行fun1、fun2、fun3”,这个应该怎么来写呢,一直纠结在这个循环上,不知道怎么写,没有思路,能不能说一下思路,谢谢啦

看大多数用的是async,所以在学习这个

@iLolita

async.auto 里的例子和你的要求很接近:

get_data 和 make_folder 是并发的

write_file 在 get_data 和 make_folder 之后进行,email_link 在 write_file 之后进行

‘’‘ async.auto({ get_data: function(callback){ // async code to get some data }, make_folder: function(callback){ // async code to create a directory to store a file in // this is run at the same time as getting the data }, write_file: [‘get_data’, ‘make_folder’, function(callback){ // once there is some data and the directory exists, // write the data to a file in the directory callback(null, filename); }], email_link: [‘write_file’, function(callback, results){ // once the file is written let’s email a link to it… // results.write_file contains the filename returned by write_file. }] }); ’’’

回到顶部