for循环语句里面的异步操作怎么写?
发布于 12 年前 作者 songbo 19499 次预览 最后一次回复是 12 年前 来自
有一个数组results1,从数组取出每个数循环去查询数据库判断是否存在…如果存在添加到另一个参数data中, 最后循环操作完毕 把data2发送到前端。 已知数组results var telephone = results[0]; var data=’’; for( i = 1; i < results1.length; i++) { var recto=telephone.substr(0,7); mobileModel.Mobile.findOne({‘YJPhone’:recto},function(err,mresult){ if(mresult){ data+=recto; } }
} res.send(data); 因为查询数据库是异步操作,data发送时为空;怎么取改写上面的代码?
10 回复
用闭包
是这样吧, var telephone = results[0]; results1.forEach(function (result){ var recto=telephone.substr(0,7); mobileModel.Mobile.findOne({‘YJPhone’:recto},function(err,mresult){ if(mresult){ data+=recto; } } }
eventproxy +1
简单的方案是每次取回数据以后手动标记, 用来判断是否对应 result1 次操作已经完成
async
我在另一个贴中的回复: http://cnodejs.org/topic/524558f6f29c7bbd3c5c63c8
then.js的写法如下:
https://github.com/teambition/then.js 目前teambition.com前端和angularjs.cn的后端采用的then.js
把操作放入数组func然后用async.parallel也可以吧? each(results1 ,function(results){func.push(function(callbak){…}}) async.parallel(func,function()…
推荐一篇博文,关于 async 的:http://freewind.me/blog/20120515/917.html
用async吧
用promise, like this