【问题标题】:Javascript wait for nested loops to finish [duplicate]Javascript等待嵌套循环完成[重复]
【发布时间】:2021-06-14 16:31:12
【问题描述】:

这是我的问题: 我有用于数据处理的嵌套循环(这是我所拥有的简化版本:

 const dataTreatment = (formData) => {
   for (let i = 0; i < formData.agencies.length; i++) {
     for(const type in formData.formTypes) {
       switch(type) {
         case 'address':
           formData[type].forEach(async (item) => {
             await axios.post('', {});
           }
           break;
         case 'schedules':
           formData[type].forEach(async (item) => {
             await axios.post('', {});
           }
           break;
       }
     }
   }
 }

在另一个文件中,我先于其他文件执行此函数,并希望它等待循环完成,但它执行以下函数。

const submit = async () => {
  await dataTreatment();
  await doSomethingAfter();
}

我的问题是它没有等待并立即执行“doSomethingAfter”。我想我错过了一些关于循环和异步函数的东西......

谢谢

【问题讨论】:

    标签: javascript loops asynchronous async-await


    【解决方案1】:

    为了使await 调用起作用,您的函数需要声明为async

     const dataTreatment = async (formData) => { // note the async word
       for (let i = 0; i < formData.agencies.length; i++) {
         for(const type in formData.formTypes) {
           switch(type) {
             case 'address':
               formData[type].forEach(async (item) => {
                 await axios.post('', {});
               }
               break;
             case 'schedules':
               formData[type].forEach(async (item) => {
                 await axios.post('', {});
               }
               break;
           }
         }
       }
     }
    
    const submit = async () => {
      await dataTreatment();
      await doSomethingAfter();
    }
    

    doSomethingAfter函数也是如此,需要声明为async

    【讨论】:

      猜你喜欢
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2015-08-15
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      相关资源
      最近更新 更多