为了账号安全,请及时绑定邮箱和手机立即绑定

多个顺序fetch()承诺

多个顺序fetch()承诺

叮当猫咪 2019-09-26 15:03:11
多个顺序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)})


查看完整回答
反对 回复 2019-09-26
?
开满天机

TA贡献1786条经验 获得超13个赞

.catch()应该停止递归,除非fetchNextJson在内调用.catch()。一种方法可以处理错误,然后返回fetchNextJson.then()链接到.catch().catch(); 尽管目前的要求是fetchNextJson使用当前结果调用下一个,fetchNextJson但似乎没有其他要执行的任务-除非从可选来源提供了url

查看完整回答
反对 回复 2019-09-26
?
阿晨1998

TA贡献2037条经验 获得超6个赞

“结论是不断将then()添加到链中,直到最终返回非承诺。” .then()链到返回的任何结果fetchNextJson应在首次调用后得到保证。.then()递归调用fetchNextJson或返回累积结果或其他值作为承诺值 

查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 1080 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信