正确处理for循环中的异步回调事件。
发布于 11 年前 作者 sogego 9208 次浏览 最后一次编辑是 8 年前

标准而又安全的做法,可以参考如下我的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呢。禁止我回复了?

貌似有在贴吧问过这个问题吧

谢谢…你的回复…

回到顶部