javascript - Promise 提取返回 Promise<void | T> 而不是预期的对象

标签 javascript typescript promise

我正在类中使用 Typescript 进行简单的提取,它应该返回一个 promise ,然后我想从该提取中获取 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> .我试过像这样解决通话中的 promise :

let result = apiHelper.FetchFromPortal<T>(xyz).then(data => { return data });

理论上应该解决 Promise但这似乎不起作用。

promise 不只解决对象的任何原因?

最佳答案

Any reason why the promise isn't resolving to just the object?

原因如下:

        })
        .catch((error: Error) => { console.log(error) });

当发生异常时,此处理程序将错误记录到控制台并且不返回任何内容。编译器看到这一点并将 void 联合成员添加到返回类型。

关于javascript - Promise 提取返回 Promise<void | T> 而不是预期的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50500524/

相关文章:

typescript - 如何从内部具有 Observable 订阅的函数返回值?

typescript - 如何删除 typescript 定义?

用于定义模型类型的 Typescript 接口(interface)

javascript - Promise.all 返回函数

javascript - 为什么该站点没有使用 Google map 的 Google Logo ?我想做这个。如何?

javascript - JQuery ui 不与 mfc htmldialog 一起工作?

javascript - 在iOS中阻止的Webview中的iframe内重定向

javascript - 舍入<输入类型='color'>

node.js - 捕获自定义错误在 Bluebird 中不起作用

node.js - 如何延迟使用Q.all?