简体   繁体   English

循环中的顺序 axios 请求

[英]Sequential axios requests in a loop

I need to make 4 consecutive axios requests to the server in order to successfully upload a file.我需要向服务器发出 4 个连续的 axios 请求才能成功上传文件。 One file loads correctly.一个文件正确加载。 Problems arise with many files.许多文件都会出现问题。 How can I best load each file sequentially in a loop?我怎样才能最好地循环加载每个文件?

function uploadFile (item, index) {
        DataService.getUploadform(...).then(response => {
                ...
                DataService.postUploadForm(...).then(response => {
                ...
                   DataService.getUploadFinish(...).then(responseUploadFinish => {
                         ...
                           DataService.getDowloadLink(...).then(responseDowloadLink => {
                                 //End
                            }).catch(error => {
                            //do something  
                            })
                                   
                   }).catch(error => { 
                   //do something
                  })
                    
               }).catch(error => {
                 //do something
               })
               
       }).catch(error => {
           //do something
        })
}
 
// hook that initializes file uploads   
useUpdateEffect(() => {
    validFiles.forEach((file, index) => {
       uploadFile(file,index)
    })
}, [uploadSession]);

If it has to be sequential and your server cant handle multiple uploads at the same time then you need to await your promise DataService.getUploadform() .如果它必须是连续的并且您的服务器不能同时处理多个上传,那么您需要等待您的承诺DataService.getUploadform()

Note: this will take significantly longer.注意:这将花费更长的时间。

// add async signature
async function uploadFile (item, index) {
        return await DataService.getUploadform(...).then(response => {
                ...
                DataService.postUploadForm(...).then(response => {
                ...
                   DataService.getUploadFinish(...).then(responseUploadFinish => {
                         ...
                           DataService.getDowloadLink(...).then(responseDowloadLink => {
                                 //End
                            }).catch(error => {
                            //do something  
                            })
                                   
                   }).catch(error => { 
                   //do something
                  })
                    
               }).catch(error => {
                 //do something
               })
               
       }).catch(error => {
           //do something
        })
}

useUpdateEffect(() => {
  (async () => {
    for(let i = 0; i < validFiles.length; i++) await uploadFile(file,i)
  })()
}, [uploadSession]);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM