1

我有一个 TSLint 错误,上面写着“非 Promise 值的'await' 无效”。对于以下行:

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)request.RequestPromiseRequestPromise在 @types/request-promise 库中再次定义如下:

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

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

4

1 回答 1

1

这不起作用的原因是 request-promise 使用 Bluebird 作为 Promise 库。Tslint 正在咩咩咩咩,因为您正在等待 Bluebird 的承诺,而不是原生的承诺。

在顶部@types/request-promise你会发现 Promise 覆盖

import Promise = require('bluebird');

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

于 2017-11-28T19:42:13.730 回答