javascript - 当函数是递归Javascript时如何返回父函数

标签 javascript jquery ajax recursion wikipedia

我已经完成了 FreeCodeCamp,并给自己分配了从 Wikipedia API 获取图像的任务。我已经很接近了,但我只是在使用这个递归函数时遇到了麻烦。

我在处理 ajax 请求时遇到了一些问题。我希望当 obj===label 时返回整个成功函数。然而,它只返回 findObjByLabel() 的一个实例。

如何才能让成功函数一找到标签就完全返回?

var wikiUrl = "https://en.wikipedia.org/w/api.php?action=query&format=json&titles=India&prop=pageimages&pithumbsize=300&callback=?";


// this retrieves info about the wikiUrlImg
$.ajax( {
    url: wikiUrl,
     data: {
    format: 'json'
     },
    dataType: 'json',
    type: 'GET',
    headers: { 'Api-User-Agent': 'Example/1.0' },
    success: function(data) {          
        console.log("wiki api success");            
        var findLabel = findObjByLabel(data,"India",1);

        function findObjByLabel(obj, label, iterrations){
            var itterationLimit = "9";              
            if (iterrations < itterationLimit){
                    for(var i in obj){              
                        if(obj === label){ 
                            console.log(">>>>>>>>>>>>>>>>>>>>>>> !!!its the label!!! <<<<<<<<<<<<<<<<<<<<<<<<");                
        // ****************I want the success function to return here! ****************
                            return "something";
                        }else{
                            console.log(">>>>>>>>>>>>>>>>>>>>>>>its not the label<<<<<<<<<<<<<<<<<<<<<<<<");
                                console.log("i= "  + i);
                                if(obj.hasOwnProperty(i)){

                                    iterrations+=1;
                                    console.log("obj[i] : " + obj[i]);
                                    var foundLabel = findObjByLabel(obj[i], label, iterrations);

                                }       

                        }

                    }
            }

        }//end of findObjByLabel function         
},  //end of success

error: function(){
        console.log("failure of getWiki api");
    }

}); 

最佳答案

替代obj[i]对于 objif状况、使用 break if内声明、地点 return for 之外的声明循环

var wikiUrl = "https://en.wikipedia.org/w/api.php?action=query&format=json&titles=India&prop=pageimages&pithumbsize=300&callback=?";

// this retrieves info about the wikiUrlImg
$.ajax({
  url: wikiUrl,
  data: {
    format: 'json'
  },
  dataType: 'json',
  type: 'GET',
  headers: {
    'Api-User-Agent': 'Example/1.0'
  },
  success: function(data) {
    console.log("wiki api success");
    var findLabel = findObjByLabel(data, "India", 1);

    function findObjByLabel(obj, label, iterrations) {
        var itterationLimit = "9";
        if (iterrations < itterationLimit) {
          for (var i in obj) {
            if (obj[i] === label) {
              console.log(">>>>>>>>>>>>>>>>>>>>>>> !!!its the label!!! <<<<<<<<<<<<<<<<<<<<<<<<");
              // ****************I want the success function to return here! ****************
              break; // break `for` loop
            } else {
              console.log(">>>>>>>>>>>>>>>>>>>>>>>its not the label<<<<<<<<<<<<<<<<<<<<<<<<");
              console.log("i= " + i);
              if (obj.hasOwnProperty(i)) {

                iterrations += 1;
                console.log("obj[i] : " + obj[i]);
                var foundLabel = findObjByLabel(obj[i], label, iterrations);

              }
            }
          }
        }
        return "something"; // return `"something"`
      } //end of findObjByLabel function  
    console.log(findLabel); // "something"
  }, //end of success

  error: function() {
    console.log("failure of getWiki api");
  }

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - 当函数是递归Javascript时如何返回父函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37371676/

相关文章:

php - jQuery 从 ajax 响应中读取数组

javascript - createjs,用 x1,y1 和 x2,y2 坐标动画化一条线

javascript - 这是在 ScrollMagic 中初始化 'setPin' 方法的正确方法吗?

javascript - Jquery 模糊在 Firefox 和 Chrome 中不起作用,但在 IE9 中有效

javascript - PUT 请求被多次调用

ajax - asp.net MVC 3中的简单Ajax,更新模型并重新渲染部分

javascript - node.js 请求中的多个 'Cookie' header

javascript - webpack 拆分和导入模块

javascript - 使用 jQuery 向第一个 div 添加一个类

javascript - jQuery动画从左到右有间隙