RequestPromise 中的等待无效

Invalid await in RequestPromise

我遇到了一个 TSLint 错误,它为以下行显示 "Invalid 'await' of a non-Promise value.":

const response: RequestResponse = <RequestResponse>await this.apiRequest(uri);

上下文代码:

private apiRequest: RequestAPI<request.RequestPromise, request.RequestPromiseOptions, RequiredUriUrl>;
this.apiRequest = request.defaults({
      baseUrl: 'https://www.google.com/',
      method: 'GET',
      encoding: 'utf8'
    });

根据类型定义,this.apiRequest(uri) 的 return 类型是 request.RequestPromiseRequestPromise 在@types/request-promise 库中又是这样定义的:

interface RequestPromise extends request.Request, Promise<any> {
      promise(): Promise<any>;
}

难道不应该等待 RequestPromise 吗,因为它只是扩展了一个 Promise?

这不起作用的原因是请求承诺使用 Bluebird 作为 Promise 库。 Tslint 正在抱怨,因为您正在等待 Bluebird 承诺而不是本机承诺。

@types/request-promise 的顶部,您会发现 Promise 覆盖

import Promise = require('bluebird');

为了摆脱 tslint 警告,您可以使用使用原生承诺(request-promise-native)的请求库,或者简单地使用 .then() 而不是 await 来等待已解决的响应。