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

时间:2018-03-01 23:44:07

标签: javascript callback

自学成才,并努力了解回调如何运作。

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

  • “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>

2 个答案:

答案 0 :(得分:1)

  

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

应为console.log(ResultsArray[1]),括号不合适。

答案 1 :(得分:0)

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

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
});
相关问题