我正在使用类中的Typescript进行简单的获取,它应该返回一个promise,然后我想从这个fetch中获取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
,但这似乎不起作用。
承诺不解决对象的任何理由?
答案 0 :(得分:2)
承诺没有解决到对象的任何理由?
原因如下:
})
.catch((error: Error) => { console.log(error) });
发生异常时,此处理程序将错误记录到控制台并且不返回任何内容。编译器会看到这一点,并将void
union成员添加到返回类型。
答案 1 :(得分:2)
承诺不解决对象的任何理由?
是的,承诺解决方案发生在某种“异步空间”上,呼叫将始终只返回一个承诺。承诺的结果只是通过then()
链转发, never 返回给调用者(因为它们是异步的)。
但我认为您可以使用await
:
let result = await apiHelper.FetchFromPortal<T>(xyz);