Функция Firebase не возвращает ответ клиентскому приложению - PullRequest
0 голосов
/ 25 мая 2020

Запуск вызываемой функции в firebase. Запуск его локально в эмуляторах Firebase. Я возвращаю простую строку, чтобы посмотреть, смогу ли я вернуть ее клиенту, но все, что я получаю в ответ, - это {"data": null}. Я не совсем уверен, в чем проблема. Я уверен, что есть что-то, чего я не понимаю в обещаниях, и если вы помогли мне в другой части этого проекта через другую проблему, я ценю это. Все еще пытаюсь понять, как все это работает. Вот функция:

exports.createAssetMux = functions.https.onCall((data, context) => {

    console.log('data: ', data)

    admin.firestore().collection('users').doc(data.id).update({
        streamID: '98273498237'
    }).then(() => {
        console.log('update success')
        return {data: 'update successful'}
    }).catch(error => {
        console.log('error message: ', error)
        return {data: 'there was an issue updating document'}
    });
});

Просто пытаюсь вернуть данные клиенту в этот момент. У меня были некоторые другие проблемы с функциями Firebase, которые я пытаюсь решить, и все это связано, просто не хотел слишком усложнять другой пост. Любая помощь была бы потрясающей! Заранее спасибо!

1 Ответ

0 голосов
/ 25 мая 2020

Операторы return не делают того, что вы ожидаете. Они просто возвращают значение из лямбда-функции, которое вы передали в then и catch. Они не возвращают значение из более крупной функции, которую вы передали в onCall.

Вызываемые функции требуют, чтобы вы возвращали обещание, которое разрешается с объектом, который вы хотите отправить клиенту. Прямо сейчас функция, переданная в onCall, всегда ничего не возвращает. Что вам нужно сделать, так это вернуть всю цепочку обещаний:

    return admin.firestore().collection('users').doc(data.id).update({
        streamID: '98273498237'
    }).then(() => {
        console.log('update success')
        return {data: 'update successful'}
    }).catch(error => {
        console.log('error message: ', error)
        return {data: 'there was an issue updating document'}
    });

Все, что я добавил, - это возврат в начале первой строки.

Понимание того, как работают JavaScript обещания имеет решающее значение для написания эффективных функций. Я настоятельно рекомендую потратить некоторое время на то, чтобы изучить их обычные паттерны.

...