firebase中foreach循环的顺序执行



我有一个来自Firebase的实时数据库,数据存储在单个字符串中,而不是对象中。问题是foreach循环最后执行,因为它需要首先运行(我的意思是顺序的(。它在没有执行其工作的情况下从循环中出来。

exports.room_server = functions.database.ref(`/${Role.ROOM_REQUEST}/{room}`)
.onCreate((snapshot,context)=>{
// her ref.once is refrence to another node of database
ref.limttolast(3).once("value",function(snap){
snap.forEach(function (usr) {
adm = usr.val();
console.log("admin " +  adm);
});
}).catch();

console.log(" cl " + adm);
});
//  cl undefined is shown first
// then it comes
// admin abc
// admin you
// admin me
//result should be 
//admin abc 
//admin you
//admin me
//cl me

您将得到以下输出:

//  cl undefined is shown first
// then it comes
// admin abc
// admin you
// admin me

因为once()是异步的,这意味着它将在完成数据检索之前转移到另一个任务,所以首先执行console.log(" cl " + adm);

您可以执行以下操作:

ref.limitToLast(3).once("value").then((snapshot) => {
snapshot.forEach((usr) => {
adm = usr.val();
console.log(" cl " + adm);
console.log("admin " +  adm);
});
}).catch((e) =>{
console.log(e);
});

then()方法返回一个Promise,当满足或拒绝Promise时将调用它。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

上面给出的答案也会起作用,但这里有另一种方法。这将是几乎相同的。

ref.limttolast(3).once("value").then((snapshot) => {

snapshot.forEach((usr) => {
adm = usr.val();
console.log(" cl " + adm);
console.log("admin " +  adm);
}); // end of foreach loop

return adm; 
//return will wrap it as promise which will be fulfilled or rejected
// return will send it to next .then() method 
})
.then( value_of_adm =>{
// value_of_adm = adm
console.log("cl" + value_of_adm);
})
.catch(
// enter your code here
// if u dont write code here no problem it will work fine
);

相关内容

  • 没有找到相关文章

最新更新