【问题标题】:Migrate Q to BlueBird (or Vow)将 Q 迁移到 BlueBird(或 Vow)
【发布时间】:2014-07-07 18:25:43
【问题描述】:

我目前在 Node/amqp 应用程序中使用 Q Promise 库。我读到 Q 与 BlueBird 或 Vow 等库的性能...不太好。

很遗憾,我不知道如何使用 BlueBird(或 Vow)来替换我当前的 Q 使用模式。

这是一个例子:

this.Start = Q(ampq.connect(url, { heartbeat: heartbeat }))
    .then((connection) => {
        this.Connection = connection;
        return Q(connection.createConfirmChannel());
    })
    .then((channel) => {
        this.ConfirmChannel = channel;
        channel.on('error', this.handleChannelError);
        return true;
    });

我应该提到 - 我正在使用 TypeScript...在这个例子中,我使用了一个 amqplib 承诺,并从中创建了一个 Q 承诺(因为我不喜欢 amqplib 承诺)。如何使用 BlueBird 或 Vow 做到这一点?

另一个例子是:

public myMethod(): Q.Promise<boolean> {
    var ackDeferred = Q.defer<boolean>();

    var handleChannelConfirm = (err, ok): void => {
        if (err !== null) {
            //message nacked!
            ackDeferred.resolve(false);
        }
        else {
            //message acked
            ackDeferred.resolve(true);
        }
    }

     ...some other code here which invokes callback above...

    return ackDeferred.promise;
}

该模式是如何实现的?

所以我的一般问题是:

  1. 我读到的性能差异是真的吗?
  2. 如何从 Q 迁移到 BlueBird 或 Vow,重点关注这两种模式(但使用“then”的解释也很好)?

【问题讨论】:

    标签: node.js promise q bluebird


    【解决方案1】:

    是的,Bluebird 比 Q 快两个数量级,并且更易于调试。您可以自己查看基准。

    至于代码:

    • Q() 映射到 Bluebird 中的 Promise.resolve(就像在 ES6 原生 Promise 中一样)。*
    • Q.defer 映射到 Promise.defer() 尽管使用承诺构造函数或自动承诺是更好的选择,如 in this answer 所述。简而言之,promise 构造函数是安全的。

    注意* - 一旦你做出了承诺,它会自动吸收来自其他库的 thenables - 所以这非常好:

    this.Start = Promise.resolve(ampq.connect(url, { heartbeat: heartbeat }))
    .then((connection) => {
        this.Connection = connection;
        return connection.createConfirmChannel());
    })
    .then((channel) => {
        this.ConfirmChannel = channel;
        channel.on('error', this.handleChannelError);
        return true;
    });
    

    【讨论】:

    • 直接跨过映射 - 我已经脱离了“Q”!
    猜你喜欢
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2014-10-11
    • 2014-03-26
    • 2014-05-30
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多