我目前在 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;
}
该模式是如何实现的?
所以我的一般问题是:
- 我读到的性能差异是真的吗?
- 我如何从 Q 迁移到 BlueBird 或 Vow,重点关注这两种模式(但使用“then”的解释也很好)?