【问题标题】:What is the return type of the json method of a response?响应的 json 方法的返回类型是什么?
【发布时间】:2017-08-16 21:18:49
【问题描述】:

我看到了一些 Angular 2 的示例,它将 http 的响应转换为 JavaScript 对象,如下所示:

http.get("http://....").subscribe(
    response => {
        let result = response.json();
    },
    error => { 
        console.log('cannot get api');
    }
);

我还看到一些示例,其中指出 json() 方法返回一个 Promise,这需要将函数包含在 then 中才能获得结果:

response.json().then(result => ({
    ///
});

为什么一个使用then 而另一个不使用? json 的返回值是多少,我应该使用哪个?

【问题讨论】:

  • 你能在这两个例子中使用console.log(response.json()) 来找出答案吗?
  • 示例是否来自相同的代码?会不会是其他示例使用 fetch 而不是 Angular2 使用的任何东西?
  • 您应该使用第一个,即订阅 observable 并将结果作为 json 对象返回。如果您创建一个 Observable 类型的函数并且不将其与 Promise 混合,这将是最佳实践。
  • @Bergi,这与您链接的问题并不完全相同。这个问题与Angular的Response定义和Fetch API之间的区别有关
  • @Saravana 哦,对了,我以为 Angular 2 会使用 fetch

标签: javascript json angular


【解决方案1】:

您看到 response.json() 返回 Promise 的示例是 Fetch API 的一部分,该 API 仍处于试验阶段:https://developer.mozilla.org/en-US/docs/Web/API/Response

Body.json()

获取一个响应流并将其读取完成。它 返回一个使用 JSON 对象解析的 Promise。

您看到的另一个示例来自 Angular 的实现,它直接返回数据而不是 Promise:https://github.com/angular/angular/blob/master/packages/http/src/body.ts#L26

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多