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