Как заставить этот асинхронный код выполняться внутри цикла for - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть петля for..of с .then внутри. Тогда я был последним средством, я попробовал обещание Все и просто простые обещания, но я просто не могу заставить это работать. (Для пояснения: он должен перебрать массив all1 в порядке

let all1 = await VCLB.findAll({order: [['time', 'DESC']], limit: 10});
  let list1 = [];
  let q = 0;
for(item of all1) {
    if(!message.guild.members.get(item.id)) return;
    if(item.time == 0) return;
          let time = item.time
    VC.findOne({where: {id: item.id}}).then(findVC => {
      if(!findVC) return;
        let timeNow = new Date().getTime();
        let startVC = findVC.time;
        let difference = timeNow - startVC;
        time = time + difference;

    })
    q++;
    time = prettyMilliseconds(time)
    list1.push(`**${q}.** | ${message.guild.members.get(item.id)} | **${time}** `)

  }

Часть, которая не работает, это

    VC.findOne({where: {id: item.id}}).then(findVC => {
      if(!findVC) return;
        let timeNow = new Date().getTime();
        let startVC = findVC.time;
        let difference = timeNow - startVC;
        time = time + difference;

    })

, даже еслион находит что-то там, не обновляет переменную времени. Я знаю, что этот способ не работает, но я, честно говоря, не имею никакого другого представления о том, как я могу это сделать без какого-либо асинхронного типа. чтобы быть синхронизированным, как после сбора данных, он помещает все это в единственную строку.Прежде чем я пытался использовать await для ожидания поиска в базе данных, но, очевидно, в этом случае это невозможно, так как мне нужно ждать, пока данныесначала соберите. Любое решение, которое позволяет искать базу данных, прежде чем продолжить, отлично.

Большое спасибо Сэм

...