forEach не дожидаясь, пока обещание не будет выполнено - PullRequest
1 голос
/ 20 июня 2020

Кто-нибудь мне в этом поможет? L oop переходит к следующему индексу до того, как обещание разрешено для текущего индекса. Вот мой код

 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

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...