2014-05-19 23 views
6

Tôi hiện đang sử dụng thư viện lời hứa Q trong ứng dụng Node/amqp. Tôi đã đọc rằng hiệu suất của Q vs các thư viện như BlueBird hoặc Vow là ... không tốt lắm.Di chuyển Q sang BlueBird (hoặc Lời thề)

Thật không may, tôi không thể tìm ra cách sử dụng BlueBird (hoặc Vow) để thay thế các mẫu sử dụng Q hiện tại của tôi.

Dưới đây là một ví dụ:

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; 
    }); 

tôi nên đã đề cập - Tôi đang sử dụng nguyên cảo ... Trong ví dụ này tôi lấy một lời hứa amqplib, và tạo ra một lời hứa Q ra khỏi nó (vì Tôi không thích những lời hứa amqplib). Làm thế nào để tôi làm điều đó với BlueBird hoặc Vow?

Một ví dụ khác là:

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; 
} 

như thế nào mô hình mà thực hiện?

Vì vậy, câu hỏi chung của tôi là:

  1. Are sự khác biệt hiệu suất Tôi đã đọc về đúng không?
  2. Làm cách nào để di chuyển từ Q sang BlueBird hoặc Vow, tập trung vào hai mẫu đó (nhưng giải thích về việc sử dụng 'then' cũng sẽ tuyệt vời)?

Trả lời

12

Có, Bluebird có hai đơn đặt hàng có cường độ nhanh hơn Q và có thể gỡ lỗi nhiều hơn. Bạn có thể tự mình xem xét điểm chuẩn.

Đối với các mã:.

  • Q() bản đồ để Promise.resolve trong Bluebird (giống như trong ES6 lời hứa mẹ đẻ) *
  • Q.defer bản đồ để Promise.defer() mặc dù đó là một lựa chọn tốt hơn để sử dụng các nhà xây dựng lời hứa hoặc tự động quảng cáo như được giải thích in this answer. Trong ngắn hạn, các nhà xây dựng lời hứa là ném an toàn.

Lưu ý * - một khi bạn đã đúc lời hứa, nó sẽ đồng hóa thenables từ các thư viện khác tự động - vì vậy đây là hoàn toàn tốt đẹp:

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; 
}); 
+0

Straight trên bản đồ - Tôi ra khỏi 'Q '! – Michael

Các vấn đề liên quan