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

在抓取内部使用抓取不是执行所有抓取请求

在抓取内部使用抓取不是执行所有抓取请求

米琪卡哇伊 2022-08-27 10:52:22
我正在尝试逐个执行三个获取请求。每个抓取请求应在完成上一个抓取请求时触发。以下是我的代码const chopSegment = (token, frame_tag_url, tag_to_delete_id, chopped_tag_array, tags_for_index_update) => (dispatch) =>  {    let req = fetch(frame_tag_url + tag_to_delete_id + "/",        {            method: "DELETE",            headers: {                "Authorization": "Token " + token,                "content-type": "application/json"            }        })    req.then(response => {        if (!response.ok) {            throw response;        }        else            return response.json();    }).then(response => {        return fetch(frame_tag_url,            {                method: "POST",                headers: {                    "Authorization": "Token " + token,                    "content-type": "application/json",                },                body : JSON.stringify(tags_for_index_update)            }).then(response1 => {            if (!response1.ok) {                throw response1;            }            return response1.json();        }).then(response => {            for(let i = 0; i < chopped_tag_array.length; i++){                return  fetch(frame_tag_url,                    {                        method: "POST",                        body: JSON.stringify(chopped_tag_array[i]),                        headers: {                            "Authorization": "Token " + token,                            "content-type": "application/json"                        }                    })                .then(response2 => {                    if (!response2.ok) {                        throw response2;                    }                    return response2.json();                }).then(response2 => {                    dispatch(chopSegmentSuccess(response2))                }).catch(error => {                })            }        }).catch(error => {        })    }).catch(error => {    })}在我的代码中,只有第一次抓取,即“DELETE”被执行?我做错了什么?
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

你不能在循环中做抓取。您将返回完成的第一个抓取。使用 promise 或 await/async 在循环中获取。如何在循环中返回许多承诺,并等待它们都做其他事情


查看完整回答
反对 回复 2022-08-27
?
慕丝7291255

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

我宁愿这样做,创建一个IIFE,并为后续的获取请求递归调用它:


return dispatch =>{

    var ctr = 0;

    (function myFunc(url, headerObj){

        fetch(url, headerObj)

        .then(response => {

            response.json().then(data=>{

                ctr++;

                if(ctr ===1 ){ // This could be any condition, say, something on the basis of response; I have taken `ctr` as a condition

                    myFunc(url, { //You may change this even to different URL, if needed

                        method: 'POST',

                        headers: {

                            'content-type': 'application/json', 

                             'body': ...,

                             'Authorization':...


                          }

                    });

                }else if(ctr === 2){

                    myFunc(url, {

                        method: 'POST',

                        headers: {

                            'content-type': 'application/json', 

                             'body': ...,

                             'Authorization':...

                          }

                    });

                }else{

                   // Any other code

                }


            })

        })

    })(url, headerObj);

}


查看完整回答
反对 回复 2022-08-27
  • 2 回答
  • 0 关注
  • 71 浏览
慕课专栏
更多

添加回答

举报

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