两个ajax如何实现同步,如何在一个同步块中异步执行多个ajax调用(jQuery)

我知道如何使用$ .when一次执行多个ajax调用。 如:如何在一个同步块中异步执行多个ajax调用(jQuery)

$.when(d1, d2).done(function (v1, v2) {

console.log(v1); // "Fish"

console.log(v2); // "Pizza"

})

不过,我想用这一个方法,这样我可以多次使用它返回一个值(例如

function getDataFor(list) {

var data = [];

$.when(d1(list), d2(list)).done(function (v1, v2) {

console.log(v1);

console.log(v2);

data = [v1, v2];

});

return data;

}

,这是什么正确的格式也? ,是它基本上是无用的使用。然后在.done在上面的例子中,除非我计划有另一个承诺遵循一个

编辑:我不觉得这是一个重复的问题,虽然我明白这是为什么。它似乎就像那样,我真的只是想知道是否有一个开箱即用的或基于库的(如jquery/bluebird)包装器,比如.NET的WaitAll方法,它接受一组异步调用并阻塞线程,直到他们都完成了。我承认这不可能,但我不觉得它是重复的。

2017-10-10

Dinerdo

+0

代码上面不会有任何效果,因为'返回数据;'总是运行Ajax调用完成之前,因此'data'不会被填充。任何你想在ajax调用完成之后发生的事情,并且依赖于它们返回的数据,_must_必须通过“done”或“then”回调来触发。你可以做什么,你的getDataFor方法是否返回由$ .when返回的Promise,以便外部代码可以附加自己的.then/.done回调。只要您愿意附上许诺,您就可以获得尽可能多的回调。 –

+0

我知道这是行不通的。我在问如何用这个例子的预期效果进行一些操作。我希望该块本质上充当一个具有async:false属性的块。在这个遗留代码的顶部初始化后有很多数组不会更改,并且它们都是当前调用同步方法的。有太多的依赖关系,因为我试图将它们中的15个链接在给定的时间线上,所以我只是试图通过将它们合并在一起来摆脱其中的一些。我可以通过将它们设置为全局变量来解决这个问题,但是.. :( –

+0

即使您将它们设置为全局变量,如果您在准备好之前尝试使用它们,您将遇到问题,而且无法知道如果你现在依靠同步来完成工作,那么遗憾的是一些重构是不可避免的,回复承诺可能是我能想到的最好的方法,那么至少你的调用代码已经抓住了一些东西,并且它可以添加自己的东西,然后当所有事情都完成时执行回调函数 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值