CNode

不确定个数的回调函数怎么等待全部回调之后再执行下一步?

问答
HhelloMane发布于8 年前最后回复8 年前15 回复3410 浏览0 收藏

例如,我这里需要动态获取url地址,个数不确定,然后使用 function funcA(){ http.request(options, (ret) => { //TODO }) } 怎么样在所有回调全部执行后再执行下一步?另外,有些url的访问可能会超时(超过3m之后才会返回超时信息),该怎么处理?

查看回复

回复 (15)

Y
yuezm#1·8 年前

可以使用async await函数

Y
yinxin630#2·8 年前

封装成Promise, 用Promise.all()吧

L
liangtongzhuo#3·8 年前

用 Promise.all() 要注意,一个网络请求 GG 就全部 GG,解决方案封装 promise 注意不管成功失败都调用 resolve 就 OK

设置一个计数器 count 每次成功回调count+1 判断count是否到达上限 到了就调用一个函数表示继续。 比promise简单。

H
helloMane#5·8 年前
引用 xcstream__legacy_582491551120be9438b02a99设置一个计数器 count 每次成功回调count+1 判断count是否到达上限 到了就调用一个函数表示继续。 比promise简单。

@xcstream 我也试过自己设一个计数器,但是难点就在于: 1.个数不确定,如果使用length之类的,就会遇到难点2; 2.有的请求会time-out,总不可能等3m之后再继续执行吧。

H
helloMane#6·8 年前
引用 yinxin630封装成Promise, 用Promise.all()吧

@yinxin630 这些都没问题,但是最难的问题在于如何把超过一定时间的请求自动丢弃?因为有的请求会超时,总不能等3m超时信息返回回来之后再继续执行吧。

H
helloMane#7·8 年前
引用 yuezm可以使用async await函数

@yuezm 有的请求会超时,怎么办?

H
helloMane#8·8 年前
引用 liangtongzhuo用 Promise.all() 要注意,一个网络请求 GG 就全部 GG,解决方案封装 promise 注意不管成功失败都调用 resolve 就 OK

@liangtongzhuo 关键是,他还不GG,他只是超时,现在情况就是想把超时的访问直接丢弃,这个就是很难办的地方。

P
pretty-foam#9·8 年前

每一次请求,options里面可以设置超出时间

H
helloMane#11·8 年前
引用 liangtongzhuo@helloMane 请求不带超时设置吗?没有自己启动一个定时器,回调

@liangtongzhuo 你的意思是setTimeout?我现在用的就是这个方法,但是感觉效果不是很好,例如请求5次,但是有2次为超时请求,其他三次都会有各自的setTimeout,时间若是设置得太短,则有些不是超时的请求也会被丢弃;时间若是设置的太长,则等待时间又会增长,况且随着请求数量的不确定性,这个方法人为控制的成本太大了。不知道我说的有没有道理?

H
helloMane#14·8 年前
引用 yuezm@helloMane 你是在使用http.request方法么,在options里面有一个 timeout

@yuezm request被封装过。。。看样子只能改改这个封装了。

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