Переменная цикла не обновляется внутри функции в угловых - PullRequest
0 голосов
/ 07 января 2019

Я использую функцию documentSnapshot в firestore, чтобы проверить, существует документ или нет.

Я запускаю функцию в цикле for до значения 5.

Хотя функция запускается 5 раз, как я мог видеть в своей консоли, но значение 'i' всегда является последним значением, а не с начала, то есть (0,1,2,3,4. .). Вне функции значение i печатается непрерывно.

user="manjoola";

  private saveToken(user, token): void {      
        var i:number=0;
        var user_document:string=user;

    for(i=0;i<5;i++)
      {
        user_document=user+i;
        console.log(user_document);
  this.firestore.doc(`pushnotifications/${user_document}`).ref.get().then((documentSnapshot) => {   

    console.log(documentSnapshot.exists);
    if(documentSnapshot.exists)
    {    

    console.log('It exists'+user+i);
    snapshot=true;    
      }

    else
    {
      this.firestore.collection(`pushnotifications`).doc(`${user_document}`).set({'authtoken': user, 'fcmtoken': token});
      console.log('Does not exists'+user+i);
      snapshot=false;

    }
    snapshot=false;
  }).catch(function (error)
  {
    console.log("Error getting document:", error);
  }
  ); 

  console.log(i);

}
}

Вывод на консоль:

manjoola0
messaging.service.ts:137 0
messaging.service.ts:112 manjoola1
messaging.service.ts:137 1
messaging.service.ts:112 manjoola2
messaging.service.ts:137 2
messaging.service.ts:112 manjoola3
messaging.service.ts:137 3
messaging.service.ts:112 manjoola4
messaging.service.ts:137 4
messaging.service.ts:115 false
messaging.service.ts:126 Does not existsmanjoola5
messaging.service.ts:115 false
messaging.service.ts:126 Does not existsmanjoola5
messaging.service.ts:115 false
messaging.service.ts:126 Does not existsmanjoola5
messaging.service.ts:115 false
messaging.service.ts:126 Does not existsmanjoola5
messaging.service.ts:115 true
messaging.service.ts:119 It existsmanjoola5

1 Ответ

0 голосов
/ 07 января 2019

Изменить это: for(i=0;i<5;i++)

к этому: for(let i=0; i<5; i++)

Выше было бы сделать область переменных i вместо области функций и исправить вашу проблему.

Чтобы вышеперечисленное сработало, удалите и эту строку: var i:number=0; - это предотвращает "переменная уже была объявлена ​​как ошибка" (вы инициализируете i в операторе for)

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