想要在for循环内部的函数全部运行完之后callback,除了我这种还有没有好的方法?
发布于 4 年前 作者 Pcman1056 4733 次浏览 最后一次编辑是 3 年前 来自 问答

var getAllFollowPerson=function(followUrl,cb){ var followArray=[]; request({ url:followUrl, headers:header },function(err,res,body){ var $=cheerio.load(body); var followCount=parseInt($(".tip2 .tc")[0].children[0].data.match(/[0-9]+/)[0]); var pageAll=followCount/10+1; pageAll=(pageAll>20?20:pageAll);

	for(num=1,i=1;i<=pageAll;i++){
		setTimeout(function () {
                        getFollowPerson(followUrl+"?page="+(num++),followArray);
                    }, parseInt(Math.random() * 100*followCount));
	}

	setTimeout(function(){
		cb(followArray);	
	},100*followCount);
	
});

}

21 回复

好的,我用一下

eventproxy after

co框架:

co ->
  for i in [0...rltSet.length]
    eny = rltSet[i]
    yield t.initTr eny,tbody
  return

感谢各位的热心解答

定义一个计数器 = array.length for 中每次调用外部的一个函数 外部函数每次 让 计数器--,并执行if(!计数器){你的代码} - -

把这些函数放在一个堆栈中,如push到Array里,然后执行这个堆栈,每执行完一个函数,销毁堆栈引用,并检测堆栈是否为空

@enmoon 这么高大上,大神真多啊

(function f(){ … if f(i < 100); else return; });

@guoyanhui 谢谢啊,已经用async解决,不过怎么把这坟挖出来了。。。。。。

是不是该给帖子加个 盖棺定论 的flag。楼主可以再问题解决时点一下。是个防盗墓功能。

@leapon 还有这个功能?点哪个呢?

@Pcman1056 没有呢。看来会有用的。

楼上正解,结合co,这是处理异步最好的方式

@leapon 赶紧加吧,又来挖了,,,大家的热情真高啊,,,但我已无力回复。。。

@Pcman1056 @leapon 这才叫讨论嘛。。。

@alsotang 是的,多多讨论

@Pcman1056 已经是promise的年代了。我锁帖了

回到顶部