多个顺序提取()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) })