从异步等待函数中获取 Bluebird Promise

Get Bluebird Promise from async await functions

我正在寻找一种方法,使用 Node v7.6 或更高版本,在调用异步函数时获得 Bluebird Promise(或任何非本地 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(...);

我知道我可以随时使用类似的东西:

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

但我 很好奇 是否有办法更改 AsyncFunction 返回的默认 Promise。构造函数似乎是封闭的:

Note that AsyncFunction is not a global object. It could be obtained by evaluating the following code.

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

MDN reference on AsyncFunction

如果没有办法更改AsyncFunction的Promise构造函数,我想知道这种锁定的原因。

谢谢!

Is there a way to change the default Promise returned by AsyncFunction

没有

What are the reasons of this locking

劫持所有 async function 的能力可能是一个安全问题。此外,即使没有问题,在全球范围内进行此替换仍然没有用。它会影响您的整个领域,包括您正在使用的所有库。他们可能依赖于使用本地承诺。并且您不能使用两个不同的承诺库,尽管它们可能是必需的。

I want to be able to do something like:

getResolvedAsyncAwaitPromise().tap(...)

可以做的是用 Promise.method:

将函数定义包装起来
const Bluebird = require('Bluebird');
const getResolvedAsyncAwaitPromise = Bluebird.method(async () => 'value');

getResolvedAsyncAwaitPromise()
.tap(…) // Works!
.then(…);