多个顺序fetch()承诺我必须做一个fetch()承诺序列:一次我只有1个网址,这意味着只有1个fetch()诺言。每次我收到一个json时,它都会包含另一个json的网址,因此我必须做出另一个fetch()承诺。我可以使用多个promise,但是在这种情况下,我做不到Promise.all(),因为我没有所有的URL,只有一个。这个例子不起作用,一切都冻结了。function fetchNextJson(json_url) {
return fetch(json_url, {
method: 'get'
})
.then(function(response) {
return response.json();
})
.then(function(json) {
console.log(json);
return json;
})
.catch(function(err) {
console.log('error: ' + error);
});}function getItems(next_json_url) {
if (!(next_json_url)) return;
get_items = fetchNextJson(next_json_url);
interval = $q.when(get_items).then(function(response) {
console.log(response);
next_json_url = response.Pagination.NextPage.Href;
});
getItems(next_json_url);}var next_json_url = 'http://localhost:3000/one';getItems(next_json_url);
3 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
您可以使用递归
function fetchNextJson(json_url) { return fetch(json_url, { method: 'get' }) .then(function(response) { return response.json(); }) .then(function(json) { results.push(json); return json.Pagination.NextPage.Href ? fetchNextJson(json.Pagination.NextPage.Href) : results }) .catch(function(err) { console.log('error: ' + error); });}var next_json_url = 'http://localhost:3000/one';var results = [];fetchNextJson(json_url).then(function(res) { console.log(res)})
开满天机
TA贡献1786条经验 获得超13个赞
.catch()
应该停止递归,除非fetchNextJson
在内调用.catch()
。一种方法可以处理错误,然后返回fetchNextJson
在.then()
链接到.catch()
或.catch()
; 尽管目前的要求是fetchNextJson
使用当前结果调用下一个,fetchNextJson
但似乎没有其他要执行的任务-除非从可选来源提供了url
阿晨1998
TA贡献2037条经验 获得超6个赞
“结论是不断将then()添加到链中,直到最终返回非承诺。” 从.then()
链到返回的任何结果fetchNextJson
应在首次调用后得到保证。.then()
递归调用fetchNextJson
或返回累积结果或其他值作为承诺值
添加回答
举报
0/150
提交
取消