有一个数组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发送时为空;怎么取改写上面的代码?
用闭包
是这样吧, 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; } } }
async
我在另一个贴中的回复: http://cnodejs.org/topic/524558f6f29c7bbd3c5c63c8
then.js的写法如下:
// url_list 为数组
then.each(url_list, function (defer, url) {
request(url, function (err, res, json) {
defer(err, json)
})
}).then(function (defer, result) {
// result 就是url获取的json结果数组,顺序与url对应
}).fail(function (defer, err) {
// 处理 err
})
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
function db(req, res){
var ps = [];
for(var k in models){
(function(k){
ps.push(
models[k].find().exec().then(function(v){
return {collection: k, data: v};
})
);
})(k);
}
Q.all(ps).then(function(a){
res.send(a);
}, function(){
res.send('未知错误');
});
}