返回的函数变为Promise,不能再被调用

时间:2019-04-05 15:22:25

标签: 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);
        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中有效,但是当我返回该函数时,它似乎变成了Promise,因此我无法调用unsubscribeStatus ()

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

async关键字具有两个作用:

  • 它使函数返回一个Promise,该Promise解析为您使用return关键字使用的任何值
  • 它允许您在函数内部使用await

如果您不希望兑现,请不要将函数标记为async。无论如何,您都不使用await