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(…);