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

时间:2018-10-02 10:38:58

标签: javascript node.js typescript ecmascript-2018

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

    public static string ProductNameValue
    {
        get
        {
            return ProductNameBox.Text;
        }
    }  

在“等待”中进行“睡眠”的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您的代码似乎是正确的,我已经像这样模拟了您的异步生成器:

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(我在v10.11.0上)。

答案 1 :(得分:1)

我知道了。问题是我正在用 Jest 执行代码。当我正常执行代码时,上面的代码可以正常工作。感谢Noseratio的回答,我把目光投向了别处。我太专注于等待。