【发布时间】:2019-09-04 05:43:18
【问题描述】:
我的代码是为了在每分钟有 60 次写入限制的在线服务中创建多个展示位置:
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 个展示位置列表的等待时间,等待时间可能会过长。
有没有更好的方法来重构此代码,以便无论如何每秒构建一个请求?如果没有那个“* (index + 1)”,它似乎会在 60 岁之后继续尝试一次构建所有内容。
我尝试使用 promises 和 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 测试中进行所有调用。
另外,值得注意的是,我在请求调用的回调中有一个解析。它解决了,所以即使我的应用程序的下一部分一直到最后。这就是为什么我在这里没有拒绝或解决。
【问题讨论】:
-
这是在 Node.js 中吗?
-
你能告诉我们你是如何尝试使用承诺的吗?注意you can't use
forEachwith them. -
是的,它是节点,我已经编辑了我的问题,以展示我最后一次使用 promises/async/await 的尝试。欣赏它
标签: javascript loops foreach async-await settimeout