Node.js 无效';等待&x27;非承诺价值(蓝鸟承诺)

Node.js 无效';等待&x27;非承诺价值(蓝鸟承诺),node.js,typescript,bluebird,tslint,Node.js,Typescript,Bluebird,Tslint,当我使用tslint--project tsconfig.json src/***/.ts对整个项目进行tslint时,我会遇到很多类似以下的tslint错误: 非承诺值的“等待”无效 这些错误出现在我等待蓝鸟承诺的每一行。我想知道我应该做些什么来避免这些警告?在运行时,我不会遇到任何问题,但是我假设有一个很好的理由来解决这些问题 例如,我正在使用amqplib库,它使用Bluebird实现所有承诺。每次我等待一个基于承诺的方法时,我都会得到一个tslint错误: const queueInfo

当我使用
tslint--project tsconfig.json src/***/.ts
对整个项目进行tslint时,我会遇到很多类似以下的tslint错误:

非承诺值的“等待”无效

这些错误出现在我等待蓝鸟承诺的每一行。我想知道我应该做些什么来避免这些警告?在运行时,我不会遇到任何问题,但是我假设有一个很好的理由来解决这些问题

例如,我正在使用amqplib库,它使用Bluebird实现所有承诺。每次我等待一个基于承诺的方法时,我都会得到一个tslint错误:

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

等待蓝鸟承诺等非承诺值的最佳方式是什么?

您可以使用将任何“thenable”对象(至少使用
then()
方法)转换为本机
Promise

其他语法(由于闭包,效率稍低):


TSLint似乎包含一个设置,用于指示在
await
表达式中将哪些类型视为承诺:

我自己还没有尝试过这个,但看起来你应该能够使用它来允许等待蓝鸟的承诺:

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

听起来好像打字有问题。ampqplib如何定义其方法返回的类型?当对
await Bluebird.resolve(3)进行lint时,您会得到相同的错误启用了类型检查。我有点失望,
Promise.resolve(bluebirdPromsie)
将引入另一个承诺。但显然,目前没有更好的方式来等待非本地承诺?@kentor
wait bluebirdPromise
是等待非本地承诺的好方式。如果有什么问题的话,那就是你的linter(或TypeScirpt)问题,而不是承诺。@jlrise tslint错误是故意的,请参阅:。@kentor我认为那条线索并不是这么说的。Ryan Cavannaugh在结束时说,没有可靠的方法可以断言用户所做的是错误的。这条线索的重点是关于人们等待那些不是任何承诺的事情(比如
5
)。哦,这是一个非常好的发现。如果tslint能够区分Bluebird和非承诺类数字(如您的评论所示),他们为什么不在microsoft contrib指南中允许它呢?@kentor我没有说tslint能够区分承诺类对象和非承诺类对象。我只是说Github上的线程的初衷似乎是关于根本不是承诺的事情,正如我所说的,该线程的最终结论是,情况太模糊,无法制定任何硬性规则(我假设当前的规则是在其他地方决定的)。关于微软捐款指南,可能是因为他们不太热衷于在捐款中允许非本地人的承诺,所以不会特意允许他们。
const queueInfo: Replies.AssertQueue = await Promise.resolve().then(() =>
    this.channel.assertQueue(this.jobQueueName)
);
"await-promise": [true, "Bluebird"]