正确处理for循环中的异步回调事件。
标准而又安全的做法,可以参考如下我的code
首先定义一个空的数组,和一个长度
var buffer = [],lens = results1.length;//lens就是你的数组的长度
var telephone = results[0];
var data='';
for( i = 1; i < results1.length; i++) {
一般for的标准是:for(var i=0,len=results1.length;i<len; i += 1){
主要的代码是,用一个自执行的function,以避免每次执行的for中的i值是一个个的,而不是最后一个。像这样的:
(function(接受的第一个参数,接受的第二个参数){
在这里面执行你的查询
})(传入第一个参数一般是每一个i的值比如:results1[i],传入第二个参数比如:i);
var recto=telephone.substr(0,7);
(function(result,l){
mobileModel.Mobile.findOne({'YJPhone':recto},function(err,mresult){
if(mresult){
data+=recto;
查询成功之后执行
buffer.push(l); 不管buffer中的内容是什么,只管它的长度,如果执行完了所有的
if(buffer.length === lens){ 这个lens有可能不是results1的长度,因为可以下面的
else执行了,如果一共查到5条匹配的,总共10条。那么
此时的lens就是5.这样buffer的长度也是5的时候就发送。
执行最后的发送
res.send(data);
}
}else{
查询不到就改变lens的长度
lens--;
}
}
})(results1[i],i);
}
3 回复
同样的内容,我本打算回复别人的topic,可为什么说我写的内容Forbibden呢。禁止我回复了?
貌似有在贴吧问过这个问题吧
谢谢…你的回复…