首页 > 解决方案 > forEach 不等到承诺解决

问题描述

有人帮我解决这个问题吗?在为当前索引解析承诺之前,循环转到下一个索引。这是我的代码

 let images = [
     {
         uri : 'file1://.....',
     },
     {
         uri : 'file2://.....',
         isBase64:true,
         base64:'ATDDJWUDUWDUDGIHDIHDI'
     },
     {
        uri : 'file3://.....',
     }
 ];

 imageProcessing().then(()=>{
    console.log('All done')
})

 imageProcessing = () => {
    return new Promise((resolve) => {
    images.forEach(async (element, index) => {
      await convertUriToBase64(element, index);
      if(images.length -1 === index){
          resolve();
      }
    });
});
  };

  let convertUriToBase64 = (element,index) => {
    return new Promise(async(resolve) => {
      if(element.isBase64){
        let base64 =  await doSomeAsyncStuff(element.uri,'base64'); // got base64 
        images[index].base64 = base64;
        images[index].isBase64 = true;
        console.log(index + ' done');
        resolve();
      }
      else{
        console.log(index + ' done');
          resolve(); // resolve if already it is in base64 format
      }
    });
  };

有可能让它像这样工作吗?我得到这样的输出

0 完成 2 完成 全部完成 1 完成

预期产出

0 done
1 done
2 done
All done

谢谢

标签: javascriptnode.jspromiseasync-awaitcallback

解决方案


推荐阅读