在Javascript中协调异步请求

我想使用两个异步调用获取两个资源。我只想在检索到两个资源后继续

我怎样才能在JS中优雅地做到这一点

这将有助于:

getStuff1(函数(结果1){
getStuff2(函数(结果2){
//使用result1和result2进行操作
….
}
}

但是stuff2只在stuff1完成后启动。我更喜欢在等待stuff1时启动stuff2

如果您知道函数实际上是Javascript中的一级对象,那么您可以想出一个相当优雅的解决方案

没有任何额外对象,或全局变量

函数回调1(){
callback1.done=true;
commonCallback();
}
函数callback2(){
callback2.done=true;
commonCallback();
}
函数commonCallback(){
如果(回拨1.完成&回拨2.完成){
//做点什么,因为你知道两个电话都回来了。
}
}

为什么这样做如此优雅?因为您已经封装了数据,所以范围从无用变量中解放出来,代码的可读性比以往任何时候都强。这有多酷?:)


更新

如果您想要更通用的解决方案,可以尝试以下方法:

函数回调(){
callback.number-=1;
如果(callback.number==0){
//在所有通话结束后做一些事情
callback.last();
}
}
callback.newQueue=函数(num,last){
callback.number=num;
callback.last=last;
}
//示例用法
//我们要调用的最后一个函数
函数afterEverythingDone(){alert(“done”);}
//创建一个新的回调队列
callback.newQueue(3,完成所有操作后);
//随着时间的推移,您将调用回调
//在每次请求后运行
回调();
回调();
回调();
//所有通话结束后
//在执行完所有操作之后

再次令人惊叹:)

发表评论