我正在使用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
答案 0 :(得分:1)
更改此项:for(i=0;i<5;i++)
对此:for(let i=0; i<5; i++)
以上内容将使i
变量成为块作用域而不是函数作用域,并且应该可以解决您的问题。
为了使上述操作有效,也请删除以下行:var i:number=0;
-这是为了防止“变量已被声明为错误”(您可以在for语句中初始化i
)>