Javascript 很难理解回调函数
我是JavaScript新手,理解回调函数有困难 下面有一个函数返回一个数组,然后是另一个函数调用第一个函数。问题是,第二个函数中的数组始终未定义,即使第一个函数中的is返回一个对象数组Javascript 很难理解回调函数,javascript,jquery,arrays,function,callback,Javascript,Jquery,Arrays,Function,Callback,我是JavaScript新手,理解回调函数有困难 下面有一个函数返回一个数组,然后是另一个函数调用第一个函数。问题是,第二个函数中的数组始终未定义,即使第一个函数中的is返回一个对象数组 function getItems() { $.get(url, function(data) { var obj = $.parseJSON(data); var itemArr = $.map(o
function getItems() {
$.get(url,
function(data) {
var obj = $.parseJSON(data);
var itemArr = $.map(obj, function(ele) { return ele; })
return itemArr;
});
}
function alertTest() {
var items = getItems();
alert(items);
}
我知道第一个函数是异步的,因此在返回数组之前调用第二个函数中的警报,这会导致第二个函数向未定义的对象发出警报
我知道这方面有很多文档,但我很难理解它是如何工作的。有人能告诉我需要做哪些更改,以便alertTest函数在调用getItems函数后返回填充的数组吗
提前谢谢 $.get是一个异步函数。这意味着在命中时调用回调函数,并在内部返回响应
现在returnitemarr实际上由回调函数返回,并且
getItems实际上不返回任何内容,因此它总是未定义的
为了让代码正常工作
function getItems() {
$.get(url,
function(data) {
var obj = $.parseJSON(data);
var itemArr = $.map(obj, function(ele) { return ele; })
alertTest(itemArr);
return itemArr;
});
}
这将调用alertTest函数。这样做的一种方法是使用JS承诺
function getItems() {
return Promise.resolve(
$.get(url,
function (data) {
var obj = $.parseJSON(data);
var itemArr = $.map(obj, function (ele) {
return ele;
})
return itemArr;
}));
}
function alertTest() {
var items = getItems().then(function (items) {
alert(items);
});
}
这是一个很难让你的头左右。承诺允许您编写像同步代码一样按顺序运行的代码
您可以在函数中插入回调,并在get请求完成时进行调用,如Rhea的另一个回答所示,但这是一种更干净的方法,承诺现在是Javascript语言的一部分。如果第一个函数也返回数组,那么第二个函数应该真正返回数组,如果需要使其正常工作,可以尝试使用alertgetItems更改函数alertTest中的行,其工作方式与您想象的相同。不需要返回Promise.resolve。只需返回$。get将做同样的事情。这将返回一个不同的I beleive,它不是承诺一个与承诺相同的合同。但是,没错,没问题。如果你认为这是最好的解决方案,你能按答案旁边的勾号将其标记为正确吗。
function getItems() {
$.get(url, function(data) {
var obj = $.parseJSON(data);
var itemArr = $.map(obj, function(ele) { return ele; })
alertTest(itemArr);
});
}
function alertTest(items) {
alert(items);
}
getItems();