web-dev-qa-db-ja.com

Promise以外の値の無効な「await」(Bluebirdpromise)

tslint --project tsconfig.json src/**/*.tsを使用してプロジェクト全体をtslintすると、次のようなtslintエラーが多数発生します。

Promise以外の値の無効な「await」。

これらのエラーは、Bluebirdの約束を待っているすべての行に表示されます。これらの警告を回避するために何をすべきか疑問に思いますか?実行時に問題は発生しませんが、これらの問題を修正する正当な理由があると思いますか?

たとえば、すべてのPromiseにBluebirdを使用するamqplibライブラリを使用しています。そして、promiseベースのメソッドの1つを待つたびに、tslintエラーが発生します。

const queueInfo: Replies.AssertQueue = await this.channel.assertQueue(this.jobQueueName);

質問:

Bluebirdの約束のようなPromise以外の値を待つための最良の方法は何ですか?

9
kentor

TSLintには、await式でpromiseとして扱うタイプを示す設定が含まれているようです。

https://palantir.github.io/tslint/rules/await-promise/

私はこれを自分で試したことはありませんが、Bluebirdの約束を待つためにこれを使用できるはずです。

"await-promise": [true, "Bluebird"]
19
JLRishe

Promise.resolve を使用して、任意の「thenable」オブジェクト(少なくともthen()メソッドを使用)をネイティブPromiseに変換できます。

const queueInfo: Replies.AssertQueue = await Promise.resolve(this.channel.assertQueue(this.jobQueueName));

代替構文(少しクロージャーのために効率が低下します):

const queueInfo: Replies.AssertQueue = await Promise.resolve().then(() =>
    this.channel.assertQueue(this.jobQueueName)
);
1
fathy