在循环的每次迭代中等待async .done()
Wait for async .done() in every iteration of loop
我有这样一个锁住的函数:
function getMainData() {
var dfd = $.Deferred();
$.getJSON('My string that i pass',
function(result) {
if (result !== undefined) {
dfd.resolve(result);
}
})
return dfd.promise()
}
function getSpecificData() {
var dfd = $.Deferred();
var myArray = [];
for (var i = 0; i < 5; i++) {
getMainData().done(function(result) {
myArray.push(result)
dfd.resolve(myArray) //This is where I am lost.
})
}
return dfd.promise()
}
getSpecificData().done(function(result) {
console.log(result);
})
我想我知道承诺是如何工作的,如果你把它们链接在一起,但是我不能让for循环等待异步调用在下一次迭代之前完成。
有人能帮帮我吗?
for循环没有办法延迟下一次迭代以等待异步代码。
可以通过使用递归调用的函数来解决
function getMainData() {
return $.getJSON('My string that i pass');
}
function getSpecificData() {
var myArray = [], def = new $.Deferred();
(function rec(i) {
getMainData().done(function(result) {
myArray.push(result);
if (i < 5 && result !== undefined) {
console.log(i)
rec(++i);
} else {
def.resolve(myArray);
}
});
})(0);
return def.promise();
}
getSpecificData().done(function(result) {
console.log(result);
});
你应该把所有的承诺都放到一个数组中,然后等待它们全部完成。
function getMainData() {
return $.getJSON('My string that i pass');
}
function getSpecificData() {
var promiseArray = [];
for (var i = 0; i < 5; i++) {
promiseArray.push(getMainData());
}
return $.when.apply($, promiseArray);
}
getSpecificData().done(function(result) {
console.log(result);
})
您是否尝试过不使用promise
:
var myArray = [];
var cpt=0;
var total=5;
getMainData();
console.log(myArray);
function getMainData()
{
$.getJSON('My string that i pass', function(result) {
if(cpt<total)
{
myArray.push(result);
cpt++;
getMainData();
}
})
}
相关文章:
- Nodejs async.each 等待第一个循环
- Chrome扩展:等待元素加载(async js)
- Babel transpiles async但不等待
- 等待函数结束(在 async.series 中)无法按预期工作
- 如何等待findOneAndUpdate完成,然后再继续async.series
- 为什么 JavaScript 函数需要有关键字“async”?“等待”关键字还不够吗?
- 如何使用async.series来等待响应
- Jasmine 2.0 async beforeEach不等待async完成
- 在config被执行之前,等待async调用
- 嵌套async db调用for循环,等待直到循环完成
- 在循环的每次迭代中等待async .done()
- 如何在jquery中等待async完成
- Javascript:等待async完成
- 等待async函数结束
- 返回一个等待的值返回一个承诺?(es7 async /等待)
- 等待GetJSON async完成
- 让Jasmine等待Async函数完成
- 在启动Angular JS之前,等待Async Task完成
- 如果并发调用请求仍在加载数据,如何等待async angularJS调用完成
- 在JS中等待Async