Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回的函数成为承诺,不能再调用_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

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()方法。哦,好吧,我不打算返回任何承诺,但我没有注意到我把它标记为异步,因此它返回了一个承诺。我明白了!快乐的编码和美好的我们!该死的,我不敢相信我自己没有玩这个。。。非常感谢。