【问题标题】:Node.js Promise without returning itNode.js Promise 不返回
【发布时间】:2020-07-11 05:29:37
【问题描述】:

我有一个用例来解决 Promise 而不返回它。在内部捕获错误,但不希望调用者等待承诺解决。

doSomething()
{
    Promise.resolve()
        .then(() => {
            // do something.
        })
        .catch(reason => {
            this.logger.error(reason);
        });
}

收到此错误:

(node:2072) Warning: a promise was created in a handler at internal/timers.js:439:21 but was not returned from it, see http://. goo.gl/rRqMUw
    at Function.Promise.cast (.../node_modules/bluebird/js/release/promise.js:225:13)

【问题讨论】:

  • 这不是错误,而是警告。你可以忽略它。
  • 我将其称为“即发即忘”异步操作,您不会通知调用者。这些肯定有一些合法的用例(尽管不是很常见)。在适当的情况下没有任何问题。只是忽略警告。警告可能存在,因为 98-99% 的时间这是一个编码错误。
  • 我明白,但问题是如何摆脱警告。数以千计的此类警告将使识别合法错误/警告变得困难
  • 在调用者中尝试/捕获?

标签: node.js promise bluebird


【解决方案1】:

只需从创建 fire and forget 承诺的 Promise 回调中返回一些内容。

我猜那个处理程序是doSomething

doSomething()
{
    Promise.resolve()
    .then(() => {
        // do something.
    })
    .catch(reason => {
        this.logger.error(reason);
    });

    return null //or anything else that's sensible
}

注意:我们通常会忽略错误消息,但有时它们包含有价值的信息。在您的错误中有一个链接 http://。 goo.gl/rRqMUw 准确地解释了这个问题:d

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2018-02-24
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多