理解js中的fetch

时间:2016-07-23 09:17:06

标签: javascript promise fetch service-worker

我检查了一些资源,但实际上并没有获取fetch方法。

有2 then - s有什么意义?第一个和第二个then的优点是什么?为什么第一个return

fetch('http://some-site.com/cors-enabled/some.json')  
  .then(function(response) {  
    return response.text();  
  })  
  .then(function(text) {  
    console.log('Request successful', text);  
  })  
  .catch(function(error) {  
    log('Request failed', error)  
  });

3 个答案:

答案 0 :(得分:7)

then来电是基于所谓的Promises。有关详细说明,请参阅Promises on Mozilla's documentation

Chaining是Promises的特殊用例。在您的代码段中,链接用于首先从外部请求响应(return response.text();)的结果中提取文本。然后将返回值作为参数提供给第二个then(),并将其记录到控制台上。

如果您想要执行多个单独的,可能是异步的操作并希望将它们分开并序列化,这将非常有用。如果这些操作中的任何一个失败,则立即调用catch,就像异常一样。

答案 1 :(得分:2)

如需详细解答,请按照文档链接fetchpromises

进行操作

'fetch'函数,执行异步操作,并始终返回Promise对象。

我的目的,只是为了澄清你似乎没有抓住的东西,并帮助你更好地理解文档。

'.then'是Promise的对象方法,在异步操作完成时调用一些代码。

'。然后'如果Promise被认为是'已解决'则按顺序调用,否则调用'.catch'来处理错误。

传递给'.then'的函数中的return语句是第二个排队'.then'的输入。

在你发布的例子中,有两个排队的'.then'只是为了表明它可以做到这一点以及如何做。

没有必要使用多个'.then',它只是有用,因为你可以拆分在不同步骤中检索数据时执行的操作,这样你就可以在你遇到错误时中止承诺。

这有助于编写干净的代码和调试,广告可以概括一些操作和重用,并且alzò会有更多的恶意错误。

答案 2 :(得分:1)

然后每个人都返回一个承诺,然后将每个后续的结果传递给后者。

假设您有员工服务

类EmployeeService {

getEmployees() {
       return fetch('http://some-site.com/cors-enabled/some.json')  
           .then(function(response) {  
           return JSON.parse(response.text());  
       })  

      .catch(function(error) {  
      log('Request failed', error)  
     });
}

}

fetch url返回一些响应,但不在json中,service可以实际修改响应,然后将结果传递给主组件

employeeService.getEmployees().then(function(json) {  
           console.log('Request sucJcessful', text);  
})  

首先考虑作为修饰语。