web-dev-qa-db-ja.com

約束をブルーバードに変換する

Promiseを使用する既存のライブラリを見つけましたが、bluebirdは使用していません。ライブラリ関数には、.map().tap()のようなbluebirdの追加機能がすべて付属しているわけではありません。 「通常」または「非ブルーバード」プロミスを、ブルーバードが提供する追加機能をすべて備えたブルーバードプロミスに変換するにはどうすればよいですか。

既存のプロミスをPromise.promisifyPromise.resolveでラップしようとしましたが、どちらも機能していないようです。

49
ThomasReggi

使用する - Promise.resolve -他の実装からのプロミスのように、thenableを受け取り、Bluebirdプロミスに同化します。

「解決」という用語 は誤解を招く可能性があり、「実現」と同じ意味ではなく、別の約束に従って結果に落ち着く可能性があることに留意してください。

74
Bergi

Promiseをbluebirdのpromiseに変換し、何も解決せずにcustomPromiseを返す場合、チェーン内のすべてのbluebirdsカスタムメソッドにアクセスできます。

Promise.resolve().then(function(){
  return customPromise()
})

または

Promise.resolve(customPromise())
16
ThomasReggi

BluebirdのPromise.method

const Promise = require('bluebird');

const fn = async function() { return 'tapped!' };

bluebirdFn = Promise.method(fn);

bluebirdFn().tap(console.log) // tapped!
fn().tap(console.log) // error
1
richardpringle

Bluebird.resolve()メソッドを使用して、ネイティブjs promiseをbluebird promiseに変換します。

public getBatched(query: QueryBuilder | Raw): Bluebird<any> {
  return Bluebird.resolve(this.cache.getBatched(query));
}
0
slideshowp2