函数返回一个只能异步获取的值列表
Function return a list of values that could only be get asynchronously
我想写这个函数:
function getResults(nums){
var results = [];
for(var i = 0, len = nums.length; i < len; i++){
var num = nums[i];
ajaxGet("http://xxx.com/" + num, function(data){
results.push(data);
});
}
return results;
}
var results = getResults([12, 22, 34]);
正如您所看到的,因为ajaxGet
是异步的,所以这不起作用。我怎么能做到这一点呢?
您还可以告诉Ajax同步运行
$.ajax({async: false});
var results = getResults();
$.ajax({async: true});
您需要使用回调返回数组,并在收到最后一个响应时调用回调。(注意,不会按顺序收到回复)
function getResults(nums, callback) {
var results = [];
for(var i = 0, len = nums.length; i < len; i++){
var num = nums[i];
ajaxGet("http://xxx.com/" + num, function(data){
results.push(data);
if (results.length === nums.length)
callback(results);
});
}
}
如果使用jQuery,可以将异步标志设置为false:
function getResults(nums){
var results = [];
for(var i = 0, len = nums.length; i < len; i++){
var num = nums[i];
jQuery.ajax({
url: "http://xxx.com/" + num},
async: flase,
success: function(data){
results.push(data);
}
});
}
return results;
}
var results = getResults([12, 22, 34]);
但如果你这样做,那么你的方法就是错误的。改为使用SLaks答案。
jQuery.ajax()
API页面
var allresults;
function getResults(nums){
var results = [];
for(var i = 0, len = nums.length; i < len; i++){
var num = nums[i];
ajaxGet("http://xxx.com/" + num, function(data){
results.push(data);
if(results.length == nums.length){
resume(results);
}
});
}
}
getResults([12, 22, 34]);
function resume(results){
allresults = results;
....
....
}
正如其他人所说,如果您不使用jQuery ,请使用
相关文章:
- 异步获取数据使用JavaScript同步获取数据
- 无法使用开放天气图 API 异步获取天气
- 如何处理异步获取的数据
- 在呈现“页面”之前异步获取数据
- backbone.js视图没有't由于异步获取而显示结果;t渲染
- 使用余烬数据如何单独异步获取子项
- 异步获取日期标头
- 异步获取脸书选项卡中的用户数据
- 谷歌地图Javascript API异步获取和动态显示标记
- 在 rails 3.2.2 中使用 $.ajax() 异步获取数据
- 将异步获取的数据传递给子道具
- 异步获取文件夹中的文件
- 使用getScripts异步获取JavaScripts
- react本机异步获取,未定义错误
- 只有当异步获取请求完成时,才能继续循环
- 函数返回一个只能异步获取的值列表
- 异步获取请求返回true
- 返回在函数中异步获取的值
- 嵌套异步获取状态的React组件会导致Flux分发链
- 在javascript中使用for循环创建一个异步获取序列