我正在寻找一种方法,使用Node v7.6或更高版本,在调用异步函数时获得Bluebird Promise(或任何非本机承诺) .
我可以这样做:
global.Promise = require('Bluebird'); // Or Q/When
var getResolvedPromise = () => Promise.resolve('value');
getResolvedPromise
.tap(...) // Bluebird method
.then(...);
见:May I use 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(...);
I know I can use at any moment something like:
Bluebird.resolve(getResolvedAsyncAwaitPromise())
.tap(...);
但我很好奇是否有办法改变 AsyncFunction
返回的默认Promise . 似乎包含了构造函数:
请注意,AsyncFunction不是全局对象 . 它可以通过评估以下代码获得 . Object.getPrototypeOf(async function(){}) . 构造函数
MDN reference on AsyncFunction
如果没有办法改变 AsyncFunction
的Promise构造函数,我想知道这种锁定的原因 .
谢谢 !
1 回答
没有 .
劫持所有
async function
的能力可能是一个安全问题 . 此外,即使在没有问题的情况下,在全球范围内进行此替换仍然没有用 . 它会影响您的整个领域,包括您正在使用的所有库 . 他们可能依赖于使用原生承诺 . 并且您不能使用两个不同的promise库,尽管可能需要它们 .你可以做的是用Promise.method将函数包装在它的定义中: