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.RequestPromise
。 RequestPromise
在@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
来等待已解决的响应。
我遇到了一个 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.RequestPromise
。 RequestPromise
在@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
来等待已解决的响应。