我检查了一些资源,但实际上并没有获取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)
});
答案 0 :(得分:7)
then
来电是基于所谓的Promises
。有关详细说明,请参阅Promises on Mozilla's documentation。
Chaining是Promises的特殊用例。在您的代码段中,链接用于首先从外部请求响应(return response.text();
)的结果中提取文本。然后将返回值作为参数提供给第二个then()
,并将其记录到控制台上。
如果您想要执行多个单独的,可能是异步的操作并希望将它们分开并序列化,这将非常有用。如果这些操作中的任何一个失败,则立即调用catch
,就像异常一样。
答案 1 :(得分:2)
'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);
})
首先考虑作为修饰语。