node.js promise async-await bluebird es6-promise

node.js - Obtenga Bluebird Promise de async en espera de las funciones



async-await es6-promise (1)

Estoy buscando una forma, con el nodo v7.6 o superior, para obtener una promesa de Bluebird (o cualquier promesa no nativa) cuando se llama a una función asíncrona.

De la misma manera que puedo hacer:

global.Promise = require(''Bluebird''); // Or Q/When var getResolvedPromise = () => Promise.resolve(''value''); getResolvedPromise .tap(...) // Bluebird method .then(...);

Ver: ¿ Puedo usar global.Promise = require ("bluebird")

Quiero ser capaz de hacer algo como:

global.Promise = require(''Bluebird''); // Or Q/When var getResolvedAsyncAwaitPromise = async () => ''value''; getResolvedAsyncAwaitPromise() .tap(...) // Error ! Native Promises does not have `.tap(...)` .then(...);

Sé que puedo usar en cualquier momento algo así como:

Bluebird.resolve(getResolvedAsyncAwaitPromise()) .tap(...);

Pero tenía curiosidad por saber si habría alguna forma de cambiar la promesa predeterminada devuelta por AsyncFunction . El constructor parece cerrado:

Tenga en cuenta que AsyncFunction no es un objeto global. Se puede obtener evaluando el siguiente código.

Object.getPrototypeOf(async function(){}).constructor

Referencia de MDN en AsyncFunction

Si no hay forma de cambiar el constructor Promise de AsyncFunction , me gustaría saber las razones de este bloqueo.

Gracias !


¿Hay alguna manera de cambiar la promesa predeterminada devuelta por AsyncFunction

No.

¿Cuáles son las razones de este bloqueo?

La capacidad de secuestrar todas las async function podría ser un problema de seguridad. Además, incluso si eso no es problema, aún no es útil hacer este reemplazo a nivel mundial. Afectaría todo su reino, incluidas todas las bibliotecas que está utilizando. Podrían confiar en usar promesas nativas. Y no puede usar dos bibliotecas de promesas diferentes, aunque podrían ser necesarias.

Quiero ser capaz de hacer algo como:

getResolvedAsyncAwaitPromise().tap(...)

Lo que puede hacer es ajustar la función en su definición con Promise.method :

const Bluebird = require(''Bluebird''); const getResolvedAsyncAwaitPromise = Bluebird.method(async () => ''value''); getResolvedAsyncAwaitPromise() .tap(…) // Works! .then(…);