Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 理解js中的fetch_Javascript_Promise_Fetch_Service Worker - Fatal编程技术网

Javascript 理解js中的fetch

Javascript 理解js中的fetch,javascript,promise,fetch,service-worker,Javascript,Promise,Fetch,Service Worker,我签出了一些资源,但没有真正获得fetch方法 拥有2个然后-s有什么意义?第一个和第二个然后有什么好处?为什么返回在第一个中 fetch('http://some-site.com/cors-enabled/some.json') .then(function(response) { return response.text(); }) .then(function(text) { console.log('Request successful'

我签出了一些资源,但没有真正获得fetch方法

拥有2个
然后
-s有什么意义?第一个和第二个
然后
有什么好处?为什么
返回在第一个中

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)  
  });

然后
调用基于所谓的
承诺
。有关详细说明,请参阅

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


如果您希望执行几个单独的、可能是异步的操作,并且希望将它们分离并序列化,那么这一点尤其有用。如果这些操作中的任何一个失败,就会像调用异常一样立即调用
catch

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

假设你有员工服务

班级雇员服务{

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)  
     });
}
}

FetchURL返回一些响应,但不是json中的响应,服务实际上可以修改响应,然后将结果传递给主组件

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

先考虑一下,然后作为一个修饰语。

要获得更详细的答案,请按照文档链接和

“fetch”函数,执行异步操作,并始终返回承诺对象

在这里,我的目的只是澄清一些您似乎没有抓住的东西,并帮助您更好地理解文档

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

如果承诺被视为“已解决”,则按顺序调用“.then”,否则将调用“.catch”来处理错误

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

在您发布的示例中,有2个排队的'.then',只是为了说明可以这样做以及如何做

不需要使用多个“.then”,它非常有用,因为您可以在不同的步骤中分割检索数据时执行的操作,以便在出现错误时中止承诺


这有助于编写干净的代码和调试,也有助于泛化一些操作和重用,并且还有更多的défaillance错误。

第一个
中的返回值。然后
将获得下一个
的承诺值。然后
-请参阅以了解此机制,因为fetch使用promissdn是承诺的良好来源(或者任何JS,真的):…简单地说,您可能希望在
then
块内执行异步/承诺操作,并将它们一个接一个地链接起来。从
then
函数返回值将其带到下一个
then
(如果成功).Mario,我不明白的是,为什么我需要第二个
,然后
?为什么我必须链接?我的意思是,我认为有一个promse如果AJAX调用成功,那么我就使用
,然后
,如果失败,那么我就使用
catch
。所以我看不到链接的好处。Piyus,我为什么需要第二个
n
您调用的修饰符?您可以省略第一个,然后在employeeService.getEmployees()中处理您的结果。然后,但这是一个普遍的约定,即您的服务应该为您提供解析后可用的内容。Joachim,为什么我在这里需要链接?我想您的示例并不真正需要链接,它只说明了每个
然后
(再次承诺)的结果可以同样使用。如果您想“序列化”,链接非常有用异步操作。如果没有它们,则必须嵌套回调函数。该示例进一步说明了第一个
的结果是第二个
的参数。