非 Promise 值的无效 'await'(Bluebird promise)
Invalid 'await' of a non-Promise value (Bluebird promise)
当我使用 tslint --project tsconfig.json src/**/*.ts
tslint 我的整个项目时,我收到很多 tslint 错误,如下所示:
Invalid 'await' of a non-Promise value.
在我等待 Bluebird 承诺的每一行中都会弹出这些错误。我想知道我应该怎么做才能避免这些警告?在运行时我没有遇到任何问题,但我认为有充分的理由来解决这些问题?
例如,我正在使用 amqplib 库,它使用 Bluebird 来实现所有承诺。每次我等待一种基于承诺的方法时,我都会收到 tslint 错误:
const queueInfo: Replies.AssertQueue = await this.channel.assertQueue(this.jobQueueName);
问题:
等待非 Promise 值(如 Bluebird promises)的最佳方法是什么?
您可以使用 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)
);
看起来 TSLint 包含一个设置,用于指示在 await
表达式中将哪些类型视为承诺:
https://palantir.github.io/tslint/rules/await-promise/
我自己还没有尝试过,但看起来您应该可以使用它来允许等待 Bluebird 承诺:
"await-promise": [true, "Bluebird"]
当我使用 tslint --project tsconfig.json src/**/*.ts
tslint 我的整个项目时,我收到很多 tslint 错误,如下所示:
Invalid 'await' of a non-Promise value.
在我等待 Bluebird 承诺的每一行中都会弹出这些错误。我想知道我应该怎么做才能避免这些警告?在运行时我没有遇到任何问题,但我认为有充分的理由来解决这些问题?
例如,我正在使用 amqplib 库,它使用 Bluebird 来实现所有承诺。每次我等待一种基于承诺的方法时,我都会收到 tslint 错误:
const queueInfo: Replies.AssertQueue = await this.channel.assertQueue(this.jobQueueName);
问题:
等待非 Promise 值(如 Bluebird promises)的最佳方法是什么?
您可以使用 Promise.resolve
.
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)
);
看起来 TSLint 包含一个设置,用于指示在 await
表达式中将哪些类型视为承诺:
https://palantir.github.io/tslint/rules/await-promise/
我自己还没有尝试过,但看起来您应该可以使用它来允许等待 Bluebird 承诺:
"await-promise": [true, "Bluebird"]