【发布时间】:2018-11-03 03:51:20
【问题描述】:
我在一个类中使用 Typescript 进行简单的提取,它应该返回一个承诺,然后我想从这个提取中获取 JSON 响应。但是,无论我进行什么更改,该函数总是返回一个Promise<void | T>,这破坏了我代码中的类型检查。
export class ApiHelper {
constructor() { }
public FetchFromPortal<T>(xyz: string) {
------ Other less relevant code -----------
return fetch(url, options)
.then((response) => this.CheckStatus(response))
.then((response) => this.ParseJSON<T>(response))
.then((response) => {
console.log(response);
return response;
})
.catch((error: Error) => { console.log(error) });
}
private CheckStatus(response : Response) : Promise<Response> {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response);
} else {
let error = new Error(response.statusText);
throw error;
}
}
private ParseJSON<T>(response : Response) {
return response.json() as Promise<T>;
}
}
我随后这样称呼它:
let result = apiHelper.FetchFromPortal<T>(xyz);
根据 Typescript,这将返回一个 Promise<void | T>。我试过像这样解决通话中的承诺:
let result = apiHelper.FetchFromPortal<T>(xyz).then(data => { return data });
理论上应该解决Promise,但这似乎不起作用。
promise 不只解决对象的任何原因?
【问题讨论】:
-
"显然是请求对象。" - - 不可能。你不会和
console.log(response);混淆吗? -
@zerkms 实际上是这样。我有一个流氓console.log,由于异步请求,我误读了订单。那时它是
Pending Promise状态。我会更新我原来的问题。 -
“但这似乎不起作用。” --- 这究竟是什么意思?你无法逃避承诺。一旦你进去了——你注定只能使用一个 Promise 对象。
-
@zerkms 我不想逃避它。我正在尝试解决承诺并从 fetch 中返回 json 对象。目前,无论我做什么,Promise 始终处于待处理状态。
-
Promise<void | T>中的void来自您的catch。如果发生错误,您的代码会吞下它,从而影响void。即如果有错误,则没有解析的T值。
标签: javascript typescript promise