Javascript 返回的函数成为承诺,不能再调用
我有这个功能:Javascript 返回的函数成为承诺,不能再调用,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我有这个功能: async listenProgrammStatus(uid, programmId, onUpdate) { const unsubscribe = firebase.firestore().collection('Users').doc(uid).collection('ProgrammStatus').doc(uid + programmId).onSnapshot(function (doc) { console.log('DOC', doc);
async listenProgrammStatus(uid, programmId, onUpdate) {
const unsubscribe = firebase.firestore().collection('Users').doc(uid).collection('ProgrammStatus').doc(uid + programmId).onSnapshot(function (doc) {
console.log('DOC', doc);
if (doc.exists) {
const status = doc.data();
status.id = doc.id;
onUpdate(status);
}
})
console.log(unsubscribe)
return unsubscribe;
},
我这样称呼它:
const unsubscribeStatus = db.listenProgrammStatus(this.user.uid, this.programm.id, (status) => {
console.log('STATUS', status);
this.status = status;
})
console.log('UNSUB', unsubscribeStatus)
this.unsubscribeStatus = unsubscribeStatus;
我返回的退订功能在我返回后似乎不起作用。调用unsubscribeStatus()
无效
unsubscribe()
在listenProgrammStatus
中工作,但当我返回该函数时,它似乎变成了一个承诺,我无法调用unsubscribeStatus()
有什么想法吗?关键字
async
有两种效果:
- 它使函数返回一个承诺,该承诺解析为与
关键字一起使用的任何值return
- 它允许您在函数中使用
wait
如果不需要承诺,请不要将函数标记为
async
。无论如何,您都没有在其中使用wait
我谨建议您彻底阅读onSnapshot
的文档,因为我感觉您误解了它的工作原理。对不起,你为什么这么想?我的问题是函数是异步的(偶然),但我看不出我使用onSnapshot的方式有什么错。如果我没有弄错,就没有理由“提示”onSnapshot:它用于附加DocumentSnapshot事件的侦听器,并且不返回承诺。通过调用unsubscribe()可以分离侦听器,从而停止调用事件回调。此函数也不返回承诺。我感觉你在用它作为一个异步get()方法。哦,好吧,我不打算返回任何承诺,但我没有注意到我把它标记为异步,因此它返回了一个承诺。我明白了!快乐的编码和美好的我们!该死的,我不敢相信我自己没有玩这个。。。非常感谢。