为什么这个函数赋值什么都没有返回?

时间:2015-12-15 03:09:55

标签: javascript jquery api

我有一个调用函数的函数。子函数进行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?,这是我学到的,我需要使用回调函数,我现在正在做,但我仍然遇到问题。

0 个答案:

没有答案