跳到主要内容
CNode

想要在for循环内部的函数全部运行完之后callback,除了我这种还有没有好的方法?

问答
PPcman1056发布于 11 年前最后回复 7 年前
2180630

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)

A
alsotang#217 年前
引用 Pcman1056@alsotang 是的,多多讨论

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

P
Pcman1056#207 年前
引用 alsotang@Pcman1056 @leapon 这才叫讨论嘛。。。

@alsotang 是的,多多讨论

A
alsotang#1911 年前

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

P
Pcman1056#1811 年前
引用 leapon@Pcman1056 没有呢。看来会有用的。

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

J
joney-pinkman#1711 年前

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

W
wspandihai#1611 年前

promise.all

L
leapon#1511 年前
引用 Pcman1056@leapon 还有这个功能?点哪个呢?

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

L
leapon#1311 年前

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

P
Pcman1056#1211 年前
引用 guoyanhui(function f(){ .... if f(i < 100); else return; });

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

G
guoyanhui#1111 年前

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

E
enmoon#811 年前

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

M
MiguelValentine#711 年前

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

C
captainblue2013#611 年前
引用 leaponasync 呀

@leapon 我也是用这个,

P
Pcman1056#511 年前

感谢各位的热心解答

1
151263#411 年前

co框架:

co ->
  for i in [0...rltSet.length]
    eny = rltSet[i]
    yield t.initTr eny,tbody
  return
M
mexiQQ#311 年前

eventproxy after

P
Pcman1056#211 年前

好的,我用一下

L
leapon#111 年前

async 呀

参与回复

登录后即可参与回复。登录