nco*_*den 11 node.js promise async-await bluebird es6-promise
我正在寻找一种方法,使用Node v7.6或更高版本,在调用异步函数时获得Bluebird Promise(或任何非本机承诺).
我可以这样做:
global.Promise = require('Bluebird'); // Or Q/When
var getResolvedPromise = () => Promise.resolve('value');
getResolvedPromise
.tap(...) // Bluebird method
.then(...);
Run Code Online (Sandbox Code Playgroud)
请参阅:我可以使用global.Promise = require("bluebird")
我希望能够做到这样的事情:
global.Promise = require('Bluebird'); // Or Q/When
var getResolvedAsyncAwaitPromise = async () => 'value';
getResolvedAsyncAwaitPromise()
.tap(...) // Error ! Native Promises does not have `.tap(...)`
.then(...);
Run Code Online (Sandbox Code Playgroud)
我知道我可以随时使用:
Bluebird.resolve(getResolvedAsyncAwaitPromise())
.tap(...);
Run Code Online (Sandbox Code Playgroud)
但我很好奇是否有办法改变返回的默认Promise AsyncFunction
.似乎包含了构造函数:
请注意,AsyncFunction不是全局对象.它可以通过评估以下代码获得.
Run Code Online (Sandbox Code Playgroud)Object.getPrototypeOf(async function(){}).constructor
如果没有办法改变AsyncFunction
's Promise构造函数,我想知道这种锁定的原因.
谢谢 !
Ber*_*rgi 14
有没有办法更改AsyncFunction返回的默认Promise
没有.
这种锁定的原因是什么?
劫持所有人async function
的能力可能是一个安全问题.此外,即使没有问题,在全球范围内进行此替换仍然没有用.它会影响您的整个领域,包括您正在使用的所有库.他们可能依赖于使用原生承诺.并且您不能使用两个不同的promise库,尽管可能需要它们.
我希望能够做到这样的事情:
Run Code Online (Sandbox Code Playgroud)getResolvedAsyncAwaitPromise().tap(...)
你可以做的是将函数包装在其定义中Promise.method
:
const Bluebird = require('Bluebird');
const getResolvedAsyncAwaitPromise = Bluebird.method(async () => 'value');
getResolvedAsyncAwaitPromise()
.tap(…) // Works!
.then(…);
Run Code Online (Sandbox Code Playgroud)