多个顺序提取()Promise

我必须做一个fetch()的序列Promise:我一次只有一个url,这意味着只有一个fetch() promise。 每次我收到一个json,这个包含另一个json的url,所以我必须做另一个fetch()承诺。

我能够与多个承诺,但在这种情况下,我不能做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); 

你可以使用recursion

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