Как получить данные из Firestore в облачной функции? - PullRequest
0 голосов
/ 20 ноября 2018

Мне нужно знать, что я здесь не так делаю?

Я вызываю эту функцию из Flutter.Обратный звонок выполняется правильно, и первые и вторые отпечатки поступают в «журнал» на Firbase.Но получить неопределенное значение из «Firestore» !!

Это код в облачной функции:

var functions = require("firebase-functions");
let admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
admin.firestore().settings({ timestampsInSnapshots: true });


exports.storeContact5 = functions.https.onCall((data, context) => {
    // First print is working fine
    console.log('test');
    var recieverId = 'WqHxLoYvRxR9UK8sFJZ9WxTOIE32';
    const check = admin.firestore().collection('users').doc(recieverId).get();
    check.then(testValue => {
        console.log(testValue.data.nickname);
        return true;
    }).catch(err => {
        console.log('Error getting document', err);
    });
    console.log('test2');
    // Return to flutter App (Working fine)
    return {
        repeat_message: 'ok!'
    }
});

Снимок экрана для журнала Firebase

enter image description here

1 Ответ

0 голосов
/ 20 ноября 2018

Вы должны сделать testValue.data().nickname, а не testValue.data.nickname, см. https://firebase.google.com/docs/firestore/query-data/get-data#get_a_document и https://firebase.google.com/docs/reference/js/firebase.firestore.DocumentSnapshot#data.

Кроме того, вы должны вернуть результат только один раз, и вы не должны возвращаться за пределы .then(), если вы хотите вернуть результат асинхронной операции.

Кроме того, здесь описано, как обрабатывать ошибки: https://firebase.google.com/docs/functions/callable#handle_errors

Поэтому вы можете сделать следующее:

exports.storeContact5 = functions.https.onCall((data, context) => {
    // First print is working fine
    console.log('test');
    var recieverId = 'WqHxLoYvRxR9UK8sFJZ9WxTOIE32';
    const check = admin.firestore().collection('users').doc(recieverId).get();
    return check.then(testValue => {
        console.log(testValue.data().nickname);
        return {repeat_message: 'ok!'};
    }).catch(err => {
        console.log('Error getting document', err);
        throw new functions.https.HttpsError('Error getting document', err);
    });
});

Я бы посоветовал вам посмотреть видео софициальная серия: https://firebase.google.com/docs/functions/video-series/,, в частности, серии «Изучите обещания JavaScript»

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