пн goose findone внутри цикла For - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь выполнить итерацию для l oop. Пока я нахожусь внутри l oop для каждой итерации, я хочу найти значения в коллекции, а затем сохранить ее в другой коллекции. Проблема в том, что он ожидает, пока не завершится весь набор значений, и пытается найти в коллекции последнюю пару записей. В то время как мое требование состоит в том, чтобы он выполнял поиск с самого начала. Вот код на данный момент.

for(i=0; i<namearray.length-1; ){
              player1 = namearray[i];
              console.log("Hi i am Player 1", player1)
              for(j=1; j<namearray.length; ){
                if(j <= i){
                  j = i;
                  j++;
                  continue;
                }
                player2 = namearray[j]
                console.log("Hi i am player 2", player2)
                tournamentMatchRegister.findOne({$and:[{$or:[{Player1_Name : player1}, {Player2_Name : player2}]},
                    {$or:[{Player1_Name : player2}, {Player2_Name : player1}]}]},(function(err,data2){
                      if(err){
                        console.log(err)
                      } else {
                        console.log(data2)
                        console.log("Hi I am here")
                        console.log("Hi i am ", player1)
                        console.log("Hi i am ", player2)
                        if(data2.Match_Completed === "No"){
                          var newpotentialmatch = new scheduleRegister({
                            Week_Number: weeknumber,
                            Player1_Name: player1,
                            Player1_Team: data2.Player1_TeamName,
                            Player1_Seed: data2.PlayerSeedLevel,
                            Player2_Name: player2,
                            Player2_Team: data2.Player2_TeamName,
                            Player2_Seed: data2.PlayerSeedLevel
                          }); newpotentialmatch.save(function(err,data3){
                            if(err){
                              console.log(err)
                            }
                          })
                        }
                     }
                }))
                    j++
              }
              i++
            }

Есть ли причина, по которой он так себя ведет?

1 Ответ

0 голосов
/ 14 июля 2020

Для этого можно использовать async/await.

Обратите внимание на использование ключевого слова async перед определением функции:

let loop = async function () {
  // First loop
  ..
  .
  ..
  for (i = 0; i < namearray.length - 1; ) {
    ..
    .
    ..
    let data2 = await tournamentMatchRegister.findOne({
    $and:[{
            $or:[{
                   Player1_Name : player1
                 }, {
                   Player2_Name : player2}
                 ]},
                    {
                      $or:[{
                             Player1_Name : player2
                           }, {
                             Player2_Name : player1
                           }
                ]}
         ]}
    }
    ..
    .
    ..
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...