Возвращенная функция становится обещанием и больше не может быть вызвана - PullRequest
2 голосов
/ 05 апреля 2019

У меня есть эта функция:

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 ().

Есть идеи?

1 Ответ

1 голос
/ 05 апреля 2019

Ключевое слово async имеет два эффекта:

  • Это заставляет функцию возвращать Обещание, которое разрешается как любое значение, которое вы используете с ключевым словом return
  • Это позволяет вамиспользовать await внутри функции

Если вы не хотите обещания, не помечайте функцию как async.Вы все равно не используете await! 1014 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...