Tôi đang tìm cách, với Node v7.6 trở lên, để nhận được lời hứa Bluebird (hoặc bất kỳ lời hứa không phải là nguồn gốc nào) khi một hàm async được gọi.Nhận lời hứa Bluebird từ các chức năng chờ đợi không đồng bộ
Trong cùng một cách tôi có thể làm:
global.Promise = require('Bluebird'); // Or Q/When
var getResolvedPromise =() => Promise.resolve('value');
getResolvedPromise
.tap(...) // Bluebird method
.then(...);
Xem: May I use global.Promise=require("bluebird")
Tôi muốn để có thể làm điều gì đó như:
global.Promise = require('Bluebird'); // Or Q/When
var getResolvedAsyncAwaitPromise = async() => 'value';
getResolvedAsyncAwaitPromise()
.tap(...) // Error ! Native Promises does not have `.tap(...)`
.then(...);
Tôi biết tôi có thể sử dụng bất kỳ lúc nào như sau:
Bluebird.resolve(getResolvedAsyncAwaitPromise())
.tap(...);
Nhưng tôi đã tò mò nếu có cách nào để thay đổi Lời hứa mặc định trả về AsyncFunction
. Hàm tạo dường như được đính kèm:
Lưu ý rằng AsyncFunction không phải là đối tượng chung. Nó có thể thu được bằng cách đánh giá mã sau đây.
Object.getPrototypeOf(async function(){}).constructor
MDN reference on AsyncFunction
Nếu không có cách nào để thay đổi Promise constructor 's AsyncFunction
, tôi muốn biết lý do của khóa này.
Cảm ơn bạn!
Không, đó là không thể. Nếu có, điều đó có nghĩa là bạn sẽ ghi đè lên việc thực hiện lời hứa trên toàn cầu, đó là một cơn ác mộng. – Bergi