首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异步迭代中的“睡眠”执行“等待”(ES2018)

异步迭代中的“睡眠”执行“等待”(ES2018)
EN

Stack Overflow用户
提问于 2018-10-02 10:38:57
回答 2查看 233关注 0票数 2

我使用异步迭代从DynamoDB获取项。对于每次迭代(项目),我都会执行一些http请求。为了限制请求流,我需要在每次迭代中“睡眠”1秒。我尝试了promisify(setTimeout),但是执行停止了。

代码语言:javascript
复制
const sleep = require('util').promisify(setTimeout)

for await (const item of mapper.scan(MyDomainObject)) {

    await sleep(1000);   //This doesn't work
    // do some http requests
}

在“等待”的插话中“睡觉”的正确方式是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-03 14:40:06

我想通了。问题是,我正在使用Jest执行代码。当我正常执行代码时,上面的代码工作得很好。多亏了诺塞雷肖的回答,我才把目光转向别处。我太专注于等待。

票数 1
EN

Stack Overflow用户

发布于 2018-10-03 12:15:21

您的代码似乎是正确的,我模拟了您的异步生成器如下:

代码语言:javascript
复制
const sleep = require('util').promisify(setTimeout);

async function* scan(arg) {
  for (let i = 0; i < 4; i++) {
    console.log(`yielding ${i}`);
    await sleep(500);
    yield i;
  }
}

async function test()
{
  for await (let item of scan({})) {
    console.log(`got ${await item}`);
    await sleep(1000);
  }
}

test();

无论我为scan内部提供了多少迭代,执行都不会停止。

因此,造成问题的不是sleep,您应该找其他地方。也许,问题在于mapper.scan,或者那些http请求,或者您只需要升级您的node.js (我使用的是10.11.0版本)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52606687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档