非 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"]