2017-10-07 3 views
3

純粋なJavascriptの代わりにTypeScriptを使いたい新しいプロジェクトを開始しました。私はBluebirdをサードパーティライブラリと組み合わせて使用​​することに苦労しています。Bluebirdとes6はtypescriptで約束します

次の例を参照してください:

import * as Promise from 'bluebird' 

    private requestPlayerProfile(playerTag:string):Promise<IPlayerProfile> { 
    const requestOptions = Object.create(this.options)  
    return this.limiter.schedule(request, requestOptions) 
    } 

問題:limiterは、サードパーティのライブラリのインスタンスであると私は残りの部分でブルーバード約束を使用していながらlimiter.scheduleは、明らかにネイティブの約束を返します。私のアプリケーションの。どのように私はそのようなケースを適切に扱うだろうか?

[ts]タイプ 'プロミス'タイプは 'ブルーバード'に割り当てられません。プロパティ 'then'のタイプは と互換性がありません。

+1

使用しているライブラリが返すプロミスのタイプによって異なります。それがバニラプロミスを返す場合は、手動でマップするか、ブルーバードの代わりにネイティブプロミスを使用するだけです。 –

+0

バニラプロミスとは何ですか?私はそれがネイティブES6の約束を返すと思います。私が本来のプロミスを使用する場合、文字通りどこでもネイティブ約束を使用する必要がありますか?したがって、requestPlayerProfile関数を呼び出すすべてのルート/関数もBluebirdで動作する必要があります。ネイティブとブルーバードの約束を本当に混ぜる必要があるのであれば、ブルーバードの使用を本当に納得させませんか? – kentor

答えて

3

@Filipeがエラーメッセージを正しく解釈しています。 this.limiter.schedule(...)によって返されるオブジェクトの種類が何であれ

  • 、そのタイプはbluebird.Promise<IPlayerProfile>と互換性がありません。
  • limiter.schedule(...)は、「vanila」、つまりネイティブのPromise<IPlayerProfile>オブジェクトを返すとは誰も確実に考えることはできません。 schedule(...)が定義されているソースコードに行くと、簡単に把握できます。私のVisual Studioコードでは、F12を使用します。そこにあるオブジェクトの正確な戻り値の型に注目してください。
  • 返され、正確に内容に応じて、次の2つの主要なオプションがあります。
    1. 利用代わりに完全bluebirdの約束に頼るのコードの中でどこでもタイプを約束します。または
    2. Convert that promise type to a bluebird one。私は自分自身を試していませんが、次のように動作します:return Promise.resolve(this.limiter.schedule(request, requestOptions))http://bluebirdjs.com/docs/api/promise.resolve.html参照)。

私はそれが役に立ちそうです。

関連する問題