我有一个调用函数的函数。子函数进行API调用,因此我使用回调函数返回子函数值。
在调用子函数之后(但仍在父函数中),我正在尝试使用子函数返回的值。这是子函数和我调用函数的方式:
var getImage = function(urlforAPI, callback) {
$.getJSON(urlforAPI, function(imageData) {
console.log(imageData);
for (x in imageData.query.pages) {
if (imageData.query.pages[x].hasOwnProperty("thumbnail")) {
var storyImage = "<img src=" + imageData.query.pages[x].thumbnail.source + "></img>";
callback(storyImage);
} else {
var storyImage = "No image.";
callback(storyImage);
}
}// End FOR loop
})//End of getJSON
}// End getImage
函数调用:
var tempImage = getImage(imgAPIURL, function(storyImage) {
console.log(storyImage);
return storyImage;
});
console.log(tempImage);
当我在函数内部安装console.log storyImage
时,它会返回正确的值,所以我假设还返回了正确的值。但是,如果我在console.log tempImage中它返回未定义?此外,当我尝试使用tempImage(尝试使用jQuery将其附加到DOM中的元素)时,没有任何显示。
我已经测试了返回的值,当我手动将其插入DOM时,它可以工作。
我还在学习JS,但我知道API调用是异步发生的,对吧?所以日志发生在调用获取信息并返回之前。但是我该如何防止这种情况发生呢?如何在返回时使用返回的数据?
我已经阅读了有关堆栈溢出的几篇文章,但还没有找到解决方案。我已经阅读了How do I return the response from an asynchronous call?,这是我学到的,我需要使用回调函数,我现在正在做,但我仍然遇到问题。