循环变量未在angular中的函数内部更新

时间:2019-01-07 17:24:25

标签: angular typescript google-cloud-firestore

我正在使用Firestore的documentSnapshot函数检查文档是否存在。

我正在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 :(得分:1)

更改此项:for(i=0;i<5;i++)

对此:for(let i=0; i<5; i++)

以上内容将使i变量成为块作用域而不是函数作用域,并且应该可以解决您的问题。

为了使上述操作有效,也请删除以下行:var i:number=0;-这是为了防止“变量已被声明为错误”(您可以在for语句中初始化i