我已经这样设置了我的 JavaScript
function getData(uri) {
var $result;
var demoAPI = uri;
$.getJSON(demoAPI, function(data) {
$.each(data, function(key, val) {
names[key] = val["name"];
numbers.push(val["number"]);
});
}).done(function() {
for(i = 0; i < names.length; i++) {
var tmp = new Array(names[i], numbers[i]);
result.push(tmp);
}
return result;
});
}
问题是,使用此设置我无法使用该功能:
var values = getData('/users');
因为 return
语句在 $.getJSON
block 中的闭包中,如果我在所述 block 之后调用 return
它返回一个空数组,因为它在 ajax 调用完成之前被调用。如果我尝试使用 $.ajax()
,我将遇到同样的挑战。我需要帮助从函数 getData()
返回生成的数组。
最佳答案
正如您所发现的,您无法从异步函数可靠地返回数据。您需要传递一个回调函数,以便在接收到数据时执行。试试这个:
function getData(uri, callbackFn) {
var $result;
$.getJSON(demoAPI, function(data) {
$.each(data, function(key, val) {
names[key] = val["name"];
numbers.push(val["number"]);
});
}).done(function() {
for(i = 0; i < names.length; i++) {
var tmp = new Array(names[i], numbers[i]);
result.push(tmp);
}
callbackFn(result);
});
}
getData('/users', function(result) {
// do what is required with the returned data...
});
关于javascript - 从 Closure Within Block Within Function 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23219672/