繁体   English   中英

承诺取回承诺 <void | T> 而不是预期的对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM