2015-06-15 19 views
40

Tôi đã tìm thấy một thư viện hiện có sử dụng lời hứa, tuy nhiên nó không sử dụng bluebird. Các chức năng thư viện không đi kèm với tất cả các tính năng bổ sung mà bluebird thực hiện như .map() hoặc .tap(). Làm cách nào để chuyển đổi lời hứa "bình thường" hoặc "không bluebird" thành lời hứa màu xanh, với tất cả các tính năng bổ sung mà bluebird cung cấp?Chuyển đổi lời hứa thành bluebird

Tôi đã thử gói lời hứa hiện tại ở Promise.promisifyPromise.resolve và dường như không hoạt động.

+0

Cập nhật và tìm thấy câu trả lời đúng, điều này không thực sự đơn giản vì tôi luôn có lời hứa xanh ở đầu chuỗi lời hứa của mình. – ThomasReggi

Trả lời

62

Sử dụng Promise.resolve - sẽ mất bất kỳ điều gì có thể xảy ra, như lời hứa từ một số triển khai khác và đồng hóa nó thành lời hứa Bluebird.

Hãy nhớ rằng the term "resolve" có thể gây nhầm lẫn, điều này không có nghĩa là "hoàn thành" nhưng cũng có thể thực hiện theo một lời hứa khác và giải quyết kết quả của nó.

+0

Còn lỗi thì sao? Từ chối? – danfromisrael

+0

@danfromisrael 'Promise.resolve' cũng sẽ nhận lời hứa bị từ chối và đồng hóa chúng giống nhau. – Bergi

+1

Ví dụ: var Promise = require ("bluebird"); Promise.resolve (nonBluebirdPromise) .reflect() Phản ánh chỉ là một hàm bluebird, và sẽ không có sẵn nếu không – Leo

12

Nếu bạn muốn chuyển lời hứa thành lời hứa bluebird, không giải quyết được gì và trả lại customPromise thì bạn sẽ có quyền truy cập vào tất cả các phương thức tùy chỉnh bluebird trong chuỗi.

Promise.resolve().then(function(){ 
    return customPromise() 
}) 

Hoặc

Promise.resolve(customPromise()) 
+8

'Promise.resolve (customPromise())' là đủ, không cần thêm '.then'. –

+4

@LeonidBeschastny một 'Promise.try' cũng sẽ hoạt động nếu bạn cần bảo vệ chống lại các ngoại lệ đồng bộ –

1

Sử dụng Bluebird của Promise.method!

const Promise = require('bluebird')'; 

const fn = async function() { return 'tapped!' }; 

bluebirdFn = Promise.method(fn); 

bluebirdFn().tap(console.log) // tapped! 
fn().tap(console.log) // error 
Các vấn đề liên quan