[英]Promise fetch returning Promise<void | T> instead of expected object
我正在使用Typescript在类中进行简单的访存,这应该返回一个Promise,然后我想从此访存中获取JSON响应。 但是,无论我进行什么更改,该函数始终返回Promise<void | T>
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>
Promise<void | T>
。 我已经尝试过在电话中兑现承诺:
let result = apiHelper.FetchFromPortal<T>(xyz).then(data => { return data });
从理论上讲哪个应该解决Promise
但这似乎不起作用。
为什么诺言不仅仅解决对象?
为什么诺言不仅仅解决对象?
原因如下:
})
.catch((error: Error) => { console.log(error) });
当发生异常时,此处理程序将错误记录到控制台,并且不返回任何内容。 编译器将看到此情况,并将void
联合成员添加到返回类型。
为什么诺言不仅仅解决对象?
是的,promise解析发生在某种“异步空间”上,该调用始终只会返回一个promise。 Promise的结果仅通过then()
链转发,并且从未返回给调用方(因为它们是异步的)。
但是我认为您可以通过使用await
预期的行为:
let result = await apiHelper.FetchFromPortal<T>(xyz);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.