我写的代码旨在创建多个放置位于一个每分钟只能写入60次的在线服务中:
Original Answer翻译成"最初的回答"
placementsToAdd.forEach((placement, index) => {
setTimeout(() => {
options.url = `https://api.company.com/placement?publisher_id=${existingPub ? existingPub : placementsJson[0].PublisherId}&site_id=${placement.siteId}`
options.body = `{"placement":{"name":"${placement.placement}"}}`
request(options, callback);
},1000 * (index + 1))
})
它是这样工作的,但如果一次有2000或3000个放置列表,等待时间可能会过长。是否有更好的方法重构此代码以便每秒建立一个请求?没有 "*(索引+1)",它似乎仍在尝试一次构建所有内容,在60后撞到墙上。我尝试过使用promise和async/await(这对我来说是新的),但似乎没有改变行为。谢谢!按要求展示了如何在此代码中使用promise:
async function createThePlacements() {
let promise = new Promise((resolve, reject) => {
for (let i = 0; i < placementsToAdd.length; i++) {
setTimeout(() => {
options.url = `https://api.company.com/placement?publisher_id=${existingPub ? existingPub : placementsJson[0].PublisherId}&site_id=${placementsToAdd[i].siteId}`
options.body = `{"placement":{"name":"${placementsToAdd[i].placement}"}}`
request(options, callback);
},1000)
}
});
let result = await promise; // pause till the promise resolves
console.log('result - ', result);
}
createThePlacements();
所以,先声明一下 - 正如我之前提到过的那样,我从未使用过Async Await,所以我正在阅读相关资料尝试理解它的工作原理。这似乎是语法,但我的结果目前似乎什么都没有发生,但代码也继续执行它该做的事情,只是尝试让我的300个测试调用同时进行。
另外,值得注意的是,我在请求调用的回调函数内有一个resolve。它会被解决,因此即使我的应用程序的下一部分全部完成,它也会一直运行到最后。这就是为什么我这里没有放置拒绝或解决方案。
Original Answer翻译成:"最初的回答"
forEach
。 - Bergi