在javascript中使用for each的数组迭代
我有一个名为'movie'的数组,长度为40(通过调用API生成),但使用forEach无法遍历该数组中的所有元素。我已经读到,使用forEach的迭代顺序发生在插入顺序中,但是当我打印索引时,我发现不是这样。迭代以随机顺序进行,我只能遍历数组中的38个元素 输出-- 电影《身份证》第40集在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
您需要等待请求完成,然后再执行进一步的任务,因为这需要使用异步或执行回调 由于
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);
})
})
});
}