gpt4 book ai didi

node.js - 将 Q 迁移到 BlueBird(或 Vow)

转载 作者:搜寻专家 更新时间:2023-10-31 22:28:06 25 4
gpt4 key购买 nike

我目前正在 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 promises,并从中创建了一个 Q promise(因为我不喜欢 amqplib promises)。我如何使用 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”的解释也很好)?

最佳答案

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

至于代码:

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

注意* - 一旦你做出 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;
});

关于node.js - 将 Q 迁移到 BlueBird(或 Vow),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23743752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com