标签: setimmediate

setImmediate与nextTick

Node.js版本0.10今天发布并推出 setImmediate.该API的变化文档建议做递归时使用它nextTick调用.

MDN看起来它看起来非常相似process.nextTick.

nextTick应该何时使用,何时使用setImmediate

javascript node.js setimmediate

328
推荐指数
6
解决办法
9万
查看次数

开玩笑:await vs setImmediate vs useFakeTimers vs new Promise(setImmediate)

以下是 TypeScript 中的 Jest 测试。我想知道为什么需要 setImmediate() 。

第一个例子是一个有效的测试。接下来是我尝试过但不起作用的各种事情。我不明白发生了什么事。pubsub.publish 的签名是: (method) PubSub.publish(triggerName: string, payload: any): Promise<void>

  test.only('subscriptions', async () => {
    const document = parse(`
      subscription {
        create 
      }
    `)

    const sub = <AsyncIterator<ExecutionResult>>await subscribe(schema, document);

    expect(sub.next).toBeDefined()

    // setInterval and process.nextTick also work here:
    setImmediate(() => pubsub.publish('CREATE_ONE', { create: "FLUM!" }))  // this works


    const { value: { errors, data } } = await sub.next()

    expect(errors).toBeUndefined()
    expect(data).toBeDefined()
    expect(data.create).toBe('FLUM!')
  }, 10000)
Run Code Online (Sandbox Code Playgroud)

这些是我尝试过的其他事情,其中​​一些是在研究了类似问题的答案之后做出的。所有这些尝试都会失败,并在测试中出现超时异常:



  test.only('subscriptions', async () => {
  // attempt #1: jest.useFakeTimers()

    const …
Run Code Online (Sandbox Code Playgroud)

typescript jestjs setimmediate graphql-subscriptions

5
推荐指数
1
解决办法
1574
查看次数

如何在 Node 中承诺并等待 setImmediate?

我一直在阅读有关如何不阻止 Node 的事件循环的内容。避免阻塞的一种方法是使用分区

我试图在我的代码中使用分区循环,但我似乎无法等待我的循环。这是我的代码的简化版本:

    const report = {
        someValue: 0
    };

    const runLoop = async () => {
        report.someValue += 1;

        // all sorts of async operations here that use async-await

        if (report.someValue < 1000) {
            await setImmediate(runLoop);
        }
    };

    await runLoop();
    console.log('Report is', report);
Run Code Online (Sandbox Code Playgroud)

这会返回“Report is { someValue: 1 }”,但我希望 someValue 为 1000。

我猜 setImmediate 不会返回承诺,所以我尝试承诺它:

    const setImmediatePromise = util.promisify(setImmediate);

    const report = {
        someValue: 0
    };

    const runLoop = async () => {
        report.someValue += 1; …
Run Code Online (Sandbox Code Playgroud)

javascript recursion node.js async-await setimmediate

3
推荐指数
1
解决办法
1442
查看次数

Nodejs setImmediate() 函数实时用例和示例

有人可以解释一下 Nodejs 中 setImmediate() 函数的实时用例吗?我已经浏览了很多博客,但每个地方都给出了 console.log 使用 setImmediate 的示例。

javascript node.js setimmediate

3
推荐指数
1
解决办法
1536
查看次数