Как я могу l oop через массив только после завершения команды asyn c? - PullRequest
2 голосов
/ 20 июня 2020

Мне нужно сохранить около 35 объектов в пн goose. Я не хочу сохранять следующий, пока не будет завершен предыдущий.

Я попробовал приведенный ниже код, но он не сработал.

function loopData(array){
  let i = array.length - 1;
  while( i >= 0){
    delete array[i]['date'];
    delete array[i]['saved'];
    let article = array[i];
    DBM.saveArticle(article).then(() => {
      i--;
      console.log('article saved', i)
    });
  }
}

Я пробовал это, но не получилось работать как myL oop не распознается как асинхронный:

function loopData(array){
  for( let i = array.length - 1 ; i-- ; i >= 0){
    delete array[i]['date'];
    delete array[i]['saved'];
    let article = array[i];
    await myLoop(i, article);
  }
}

async function myLoop(i, article) {
  let response = await DBM.saveArticle(article);
  console.log('article saved', i);
}

1 Ответ

2 голосов
/ 20 июня 2020

Вы можете добиться того же эффекта с помощью рекурсии.

function loopData(array){
    DBM.saveArticle(array[0]).then(() => {
        if(array.length > 1) {
            loopData(array.slice(1));
        }
    })
}

Эта версия метода принимает массив, сохраняет первый элемент, а затем вызывает себя с остальными элементами, если таковые имеются.

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