Node v7.6以上で、非同期関数が呼び出されたときに Bluebird Promise(または非ネイティブpromise)を取得する方法を探しています。
私ができるのと同じ方法で:
global.Promise = require('Bluebird'); // Or Q/When
var getResolvedPromise = () => Promise.resolve('value');
getResolvedPromise
.tap(...) // Bluebird method
.then(...);
参照: 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
AsyncFunction
のPromiseコンストラクターを変更する方法がない場合は、このロックの理由を知りたいと思います。
ありがとうございました !
AsyncFunctionによって返されるデフォルトのPromiseを変更する方法はありますか?
番号。
このロックの理由は何ですか
すべてをハイジャックする機能async function
sはセキュリティの問題である可能性があります。また、それが問題にならない場合でも、この置換をグローバルに行うことはまだ役に立ちません。使用しているすべてのライブラリを含む、レルム全体に影響します。彼らはネイティブプロミスの使用に依存するかもしれません。また、2つの異なるpromiseライブラリを使用することはできませんが、必要になる場合があります。
私は次のようなことができるようになりたいです:
getResolvedAsyncAwaitPromise().tap(...)
できることは、関数の定義を Promise.method
:
const Bluebird = require('Bluebird');
const getResolvedAsyncAwaitPromise = Bluebird.method(async () => 'value');
getResolvedAsyncAwaitPromise()
.tap(…) // Works!
.then(…);