javascript - typescript 在http请求上设置返回类型的正确方法

标签 javascript typescript

假设我有以下功能:

getImageText(base64Image) {
    const body = {
        "requests": [
            {
                "image": {
                    "content": base64Image
                },
                "features": [
                    {
                        "type": "TEXT_DETECTION"
                    }
                ]
            }
        ]
    };
    return this.http.post('https://vision.googleapis.com/v1/images:annotate?key=' + environment.googleCloudVisionAPIKey, body);
}

现在,当此操作成功时,它会返回以下内容:{responses: [], text:'' } 所以简而言之,它返回一个带有response arraytext string

的对象

现在我的第一次尝试是设置以下返回类型:

 getImageText(base64Image): Observable<{ responses: any, text: any }> 

但是我不确定这是不是正确的做法。

我的控制台也给我一个错误。当这个 promise 返回错误时会发生什么,然后对象就不同了。

所以我的问题是在使用 http/promises

的方法上创建返回类型的正确方法是什么

最佳答案

您的方法 getImageText(base64Image) 可能会返回一个 Observable。但是,您当前的实现没有返回一个。您可以将 promise 转换为 observable。

getImageText(base64Image): Observable<{ responses: any, text: any }>  {
    const body = {
        "requests": [
            {
                "image": {
                    "content": base64Image
                },
                "features": [
                    {
                        "type": "TEXT_DETECTION"
                    }
                ]
            }
        ]
    };
    return from(this.http.post('https://vision.googleapis.com/v1/images:annotate?key=' + environment.googleCloudVisionAPIKey, body));
}

然后你可以在需要的地方订阅这个方法。

function DoSomethingWithTheResponse(){
    getImageText(yourBase64Image).subscribe(
        value => {
          //do something with the value
     });
}

关于javascript - typescript 在http请求上设置返回类型的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58555903/

相关文章:

javascript - 在保持位置时逐渐使用 jQuery

javascript - 为 browserify 导出 TypeScript 模块

javascript - Angular 6 每 5 秒运行一次代码,但它第一次发出

typescript - 如何在 typescript 中实现对象值的联合类型

javascript - Node.js 绝对引用路径

typescript - 为什么我们应该使用 “extends” 关键字而不是类型本身?

javascript - 如何通过 WebKit (JavaScript) 使用 Touch Bar

php - 根据Javascript结果删除数据库行

javascript - Oninput/Onchange 未激活功能

javascript - ng-repeat + 类似 Meteor Blaze/Spacebars 中的过滤器功能