Javascript 在for循环的下一次迭代之前完成承诺?
我肯定这是一个重复的问题。然而,自从我编写javascript以来,这已经是一个很好的时刻,我需要更新如何实现这一点。我试图使用async await,但我使用的特定软件包似乎不允许使用它(或者我很可能错误地使用async await)。我正在使用Javascript 在for循环的下一次迭代之前完成承诺?,javascript,node.js,Javascript,Node.js,我肯定这是一个重复的问题。然而,自从我编写javascript以来,这已经是一个很好的时刻,我需要更新如何实现这一点。我试图使用async await,但我使用的特定软件包似乎不允许使用它(或者我很可能错误地使用async await)。我正在使用googletrendsapi。我想等待googleTrends.interestToVertimefetch解析,然后再转到jfor循环的下一次迭代 const dogs = require('./dog_database'); const goog
googletrendsapi
。我想等待googleTrends.interestToVertime
fetch解析,然后再转到j
for循环的下一次迭代
const dogs = require('./dog_database');
const googleTrends = require('google-trends-api');
const moment = require('moment');
let threeMonthsAgo = moment()
.subtract(3, 'months')
.format();
for (i = 0; i < dogs.breeds.length; i++) {
let currentDog = dogs.breeds[i];
(async function dogComparision() {
for (j = 0; j < dogs.breeds.length; j++) {
let dogBeingCompared = dogs.breed[j];
if (dogBeingCompared === currentDog) {
console.log('Just passed current dog.');
} else {
// this is the fetch
await googleTrends
.interestOverTime({keyword: [currentDog, dogBeingCompared], startTime: new Date(threeMonthsAgo)})
.then(function(results) {
console.log(results.default.averages);
})
.catch(function(err) {
console.error('Error returned', err);
});
}
}
})();
}
const dogs=require('./dog_数据库');
const googleTrends=require('google-trends-api');
恒力矩=要求的(‘力矩’);
让我们三个月前=时刻()
.减去(3,‘月’)
.format();
对于(i=0;i
如何执行此操作?在for循环中调用异步函数时使用wait
const dogs = require('./dog_database');
const googleTrends = require('google-trends-api');
const moment = require('moment');
let threeMonthsAgo = moment()
.subtract(3, 'months')
.format();
for (i = 0; i < dogs.breeds.length; i++) {
let currentDog = dogs.breeds[i];
(async function dogComparision() {
for (j = 0; j < dogs.breeds.length; j++) {
let dogBeingCompared = dogs.breed[j];
if (dogBeingCompared === currentDog) {
console.log('Just passed current dog.');
} else {
// this is the fetch
await googleTrends
.interestOverTime({keyword: [currentDog, dogBeingCompared], startTime: new Date(threeMonthsAgo)})
.then(function(results) {
console.log(results.default.averages);
})
.catch(function(err) {
console.error('Error returned', err);
});
}
}
})();
}
如果你的应用程序中有很多地方你想使用这样的东西,考虑使用支持观察的库。< /P> < P>替换
await googleTrends
.interestOverTime({keyword: [currentDog, dogBeingCompared], startTime: new Date(threeMonthsAgo)})
.then(function(results) {
console.log(results.default.averages);
})
.catch(function(err) {
console.error('Error returned', err);
});
与:
因此,您需要等待结果,并在下一次迭代之前将其放在手中。
但请注意,这不会使DogComparison调用成为同步。。所以打印订单仍然不是你可以信赖的这是否回答了你的问题?我对你寄给我的东西有点困惑,我只有一个承诺resolve@srb633-如果你只有一个承诺,那么你只有一个品种的狗,不需要它在一个数组中循环。那么你是说为每次迭代定义的每个变量都需要是它自己的承诺?如果让我看一下,会容易得多。我将wait放在异步函数中的fetch旁边。我做错了什么?它在异步函数内部。提取在
j
循环中。你的意思是我需要在异步函数中放置两个循环吗?