gpt4 book ai didi

angular - Ionic Firebase Promise,每次更改值时调用一个函数

转载 作者:太空狗 更新时间:2023-10-29 18:25:04 27 4
gpt4 key购买 nike


我想创建一个提供程序,它是我的应用程序和 Firebase 之间的唯一接口(interface)。
我是 promises 的新手,如果我做错了可怕的事情,我深表歉意。我想要做的是每次某个值发生变化时调用一个函数在我的 FirebaseProvider 之外

FirebaseProvider:

onUpdateLobby(key){
return new Promise((resolve,reject)=>{
firebase.database().ref("/games").child(key).on('value',(snap)=>{
console.log("update");
if(snap) resolve(snap.val());
else reject(Error("onUpdateLobby Error"));
});
});
}


测试页

this.db.onUpdateLobby('test').then((snap) => {
console.log(snap);
// do stuff with the data
}).catch((err) => {
console.log(err);
});

在我的 TestPage 中,我想在每次发生更改时 Console.Log 整个对象,这甚至可能吗? (我想通过我的提供商与 Firebase 通信)

更改值 3 次后我的控制台如下所示:

  • 更新(来自提供商)
  • asdasdasd (来自 TestPage)
  • 更新(来自提供商)
  • 更新(来自提供商)
  • 更新(来自提供商)

谢谢!

最佳答案

正如我在评论中提到的。我认为您遇到的问题是您返回的是 promise 而不是 EventEmitter。请尝试使用以下代码。

Firebase 提供商:

lobbyChanges = new EventEmitter<string>;

onUpdateLobby(key){
firebase.database().ref("/games").child(key).on('value',(snap)=>{
console.log("update");
if (snap) this.lobbyChanges.emit(snap.val());
else this.lobbyChanges.error(Error("onUpdateLobby Error"));
});
}

测试页:

this.db.lobbyChanges.subscribe(
(snap) => {
console.log(snap);
// do stuff with the data
(err) => {
console.log(err);
});
this.db.onUpdateLobby('test')

关于angular - Ionic Firebase Promise,每次更改值时调用一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45148029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com