【发布时间】:2017-10-24 19:30:16
【问题描述】:
我正在寻找一种方法,使用 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(...);
我知道我可以随时使用类似的东西:
Bluebird.resolve(getResolvedAsyncAwaitPromise())
.tap(...);
但我好奇是否有办法更改AsyncFunction 返回的默认 Promise。构造函数似乎是封闭的:
请注意,AsyncFunction 不是全局对象。它可以通过评估以下代码获得。
Object.getPrototypeOf(async function(){}).constructor
MDN reference on AsyncFunction
如果没有办法改变AsyncFunction的Promise构造函数,我想知道这个锁定的原因。
谢谢!
【问题讨论】:
-
不,这是不可能的。如果是这样,那将意味着您将全局覆盖 Promise 实现,这是一场噩梦。
标签: node.js promise async-await bluebird es6-promise