从异步等待函数中获取 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(…);
我正在寻找一种方法,使用 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(…);