JavaScript回调 - 访问返回数组的各个元素的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript回调 - 访问返回数组的各个元素的问题相关的知识,希望对你有一定的参考价值。

自学成才,苦苦挣扎,了解回调是如何运作的。

我的回调处理函数无法访问数组的各个元素,即:

  • “console.log(ResultsArray)”有效
  • “console.log(ResultsArray [1])”返回“undefined”

但是,“ResultsArray [1]”在Firefox控制台中直接执行时效果很好。

我究竟做错了什么?

<script>
   ArrayOfTickers=["SPY","DIA","IWM","C"];
   ResultsArray=[];
   SomeArray=[]

   function Main(Array, callback){
       recursive(0);

       function recursive(counter) {

           if (counter < ArrayOfTickers.length) {
               fetch("https://api.iextrading.com/1.0/stock/" + ArrayOfTickers[counter] + "/time-series")
                   .then(function(response) {
                       response = response.json()
                       .then(function(data) {
                           ResultsArray[counter]=data
                       })
                    }) 
                recursive(counter+1);
            } else {
                callback(ResultsArray);
            };
        } //End recursive function
    };  //End Main Function.
    Main(ArrayOfTickers, function(ResultsArray){
        console.log(ResultsArray)
    })
</script>
答案

首先,如果您要使用回调,请使用如下错误优先回调:

const results = [];

function main(cb) {

  (function recursive(counter) {

    if (counter >= ArrayOfTickers.length) {
      return cb(null);
    }

    const url = `https://api.iextrading.com/1.0/stock/${ArrayOfTickers[counter]}/time-series`;

    fetch(url)
    .then(function (response) {
      return response.json();
    })
    .then(function (data) {
      results.push(data);
      recursive(counter + 1);
    })
    .catch(cb);

  })(0)

}

main(function (err) {
  if (err) throw err;
  console.log(results)
});

//但是使用这样的承诺可能会更好

function main() {

  const recursive = function (counter) {

    if (counter >= ArrayOfTickers.length) {
      return;
    }

    const url = `https://api.iextrading.com/1.0/stock/${ArrayOfTickers[counter]}/time-series`;

    return fetch(url)
    .then(function (response) {
      return response.json();
    })
    .then(function (data) {
      results.push(data);
      return recursive(counter + 1);
    });

  };

  return recursive(0);

}

main().then(function(){
  // check results
})
.catch(function(err){
   // handle error
});
另一答案

“的console.log(ResultsArray)[1])”

应该是console.log(ResultsArray[1]),坏括号。

以上是关于JavaScript回调 - 访问返回数组的各个元素的问题的主要内容,如果未能解决你的问题,请参考以下文章

Javascript-地图和回调-返回值不受影响[重复]

我可以在函数的回调函数中返回组件吗?

javascript reduce map函数方法

JavaScript中foreachmap函数

如何形象地解释 JavaScript 中 map,foreach,reduce 间的区别

JavaScript面试题总结系列