web-dev-qa-db-ja.com

非同期待機機能からBluebirdPromiseを取得する

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のMDNリファレンス

AsyncFunctionのPromiseコンストラクターを変更する方法がない場合は、このロックの理由を知りたいと思います。

ありがとうございました !

14
ncoden

AsyncFunctionによって返されるデフォルトのPromiseを変更する方法はありますか?

番号。

このロックの理由は何ですか

すべてをハイジャックする機能async functionsはセキュリティの問題である可能性があります。また、それが問題にならない場合でも、この置換をグローバルに行うことはまだ役に立ちません。使用しているすべてのライブラリを含む、レルム全体に影響します。彼らはネイティブプロミスの使用に依存するかもしれません。また、2つの異なるpromiseライブラリを使用することはできませんが、必要になる場合があります。

私は次のようなことができるようになりたいです:

getResolvedAsyncAwaitPromise().tap(...)

できることは、関数の定義を Promise.method

const Bluebird = require('Bluebird');
const getResolvedAsyncAwaitPromise = Bluebird.method(async () => 'value');

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