在javascript中使用for each的数组迭代

在javascript中使用for each的数组迭代,javascript,arrays,node.js,api,Javascript,Arrays,Node.js,Api,我有一个名为'movie'的数组,长度为40(通过调用API生成),但使用forEach无法遍历该数组中的所有元素。我已经读到,使用forEach的迭代顺序发生在插入顺序中,但是当我打印索引时,我发现不是这样。迭代以随机顺序进行,我只能遍历数组中的38个元素 输出-- 电影《身份证》第40集 您需要等待请求完成,然后再执行进一步的任务,因为这需要使用异步或执行回调 由于http库不返回不能直接使用async/wait的承诺,因此可以使用promise包装函数返回承诺。 试试这个 mid inde

我有一个名为'movie'的数组,长度为40(通过调用API生成),但使用forEach无法遍历该数组中的所有元素。我已经读到,使用forEach的迭代顺序发生在插入顺序中,但是当我打印索引时,我发现不是这样。迭代以随机顺序进行,我只能遍历数组中的38个元素

输出--

电影《身份证》第40集


您需要等待请求完成,然后再执行进一步的任务,因为这需要使用异步或执行回调

由于
http库
不返回不能直接使用async/wait的承诺,因此可以使用
promise包装函数
返回承诺。 试试这个

mid index:  8
mid:  27205
len:  29
count :  1
c:  29

mid index:  16
mid:  398818
len:  13
count :  2
c:  42

mid index:  6
mid:  375098
len:  16
count :  3
c:  58

mid index:  31
mid:  446791
len:  31
count :  4
c:  89

mid index:  27
mid:  372058
len:  13
count :  5
c:  102
    .
    .
.
.
count :  37
c:  1470
mid index:  3
mid:  335984
len:  28
count :  38
c:  1496
Process finished with exit code 0

在异步循环中执行http调用时,请使用异步库或在列表中收集结果,完成收集后,再使用结果您使用的http库是什么?标准http libraryHi@Help hand。谢谢,但我得到这个SyntaxError:await仅在异步函数中有效。这里的代码-该平台不支持异步,我想,我用另一种方法使用了
for loop
let
,因为它可以逐个调用异步函数,谢谢,但问题仍然存在。不知道为什么。其中2个ID未定义。check else语句实际上API设置了一个限制,即每10秒最多只能发出40个请求。因此,o/p中缺少2个结果。猜测必须计算请求的数量,并等待10秒的时间过去,以继续进行rem.请求。
mid index:  8
mid:  27205
len:  29
count :  1
c:  29

mid index:  16
mid:  398818
len:  13
count :  2
c:  42

mid index:  6
mid:  375098
len:  16
count :  3
c:  58

mid index:  31
mid:  446791
len:  31
count :  4
c:  89

mid index:  27
mid:  372058
len:  13
count :  5
c:  102
    .
    .
.
.
count :  37
c:  1470
mid index:  3
mid:  335984
len:  28
count :  38
c:  1496
Process finished with exit code 0
async function getCredits(movie) {
  let count = 0;
  let cast_ids = [];
  let movie_id = movie;
  console.log("movie_id arr.len-- ", movie_id.length);

  movie_id.forEach((movieid, index) => {
    let api_url = domain + 'movie/' + movieid + '/credits' + '?api_key=' + key;

    let total_data= await processMe(api_url); //below execution will stop untill total_data is not fetched
    const parsedData = JSON.parse(total_data);
        if (typeof parsedData.id !== 'undefined') {
          count = count + 1;
          console.log("mid.ind: ", index);
          console.log("mid: ", parsedData.id);
          console.log("len: ", parsedData.cast.length);
          console.log("count : ", count);

          parsedData.cast.forEach(castid => {
            if (cast_ids.indexOf(castid.id) == -1) {
              cast_ids.push(castid.id)
            }
          })
          console.log("c: ", cast_ids.length);
        }


  })
}

function processMe(api_url){

 return new Promise(function(resolve,reject){
      http.get(api_url, function (response) {
        let total_data = '';
        response.on('data', (temp_data) => total_data += temp_data);
        response.on('end', () => {
          resolve(temp_data);       
        })
        response.on('error',(err)=>{
          reject(err);
        })
     }) 

 });


}