firebase Функция вернула неопределенное, ожидаемое обещание или значение - PullRequest
0 голосов
/ 09 января 2019

Привет, это код, который я тоже хочу использовать для отправки уведомления о запросе на добавление в друзья из одного приложения в другое приложение для Android.

но я получаю возвращенную функцию undefined, ожидаемое обещание или значение ошибка в консоли функций, а также я не получаю значение токена ..

Мой код ниже ...

'use-strict'

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

const db = admin.firestore();

exports.sendNotification = functions.firestore
    .document("users/{user_id}/notifications/{notification_id}")
    .onWrite((change,context)=>{

    const user_id = context.params.user_id;

    console.log("We have a notification to send to", user_id);

    var ref = db.collection('device_token').doc(user_id);
    var getDoc = cityRef.get().then(doc=>{
        if (!doc.exists) {
            return console.log('No such document!');
        } else {
            console.log('Document data:', doc.data());

            const payload = {
                notification: {
                    title: "Text.",
                    body: "You have a new Friend Request!",
                    icon: "default"
                }
            }

            return admin.messaging().sendToDevice(tockenDoc, payload).then(response=>{

                return console.log("Notification sent : success");

            });

        }
    }).catch(err=>{
        console.log('Error getting document', err);
    });

});

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Функции, которые запускаются фоновыми операциями (например, запись в Firestore в вашем случае) и которые выполняют асинхронные операции (например, запись в sendToDevice() в вашем коде), должны возвращать либо значение, либо обещание дать понять, когда они будут сделаны. Вы ничего не возвращаете, поэтому Cloud Functions жалуется, что не знает, когда код будет готов.

Поскольку вы нигде не используете переменную getDoc, вы также можете ее вернуть. return admin.messaging().sendToDevice() изнутри всплывет и даст облачным функциям информацию, необходимую для того, чтобы узнать, как долго будет работать контейнер вашей функции.

return cityRef.get().then(doc=>{
    ...
}).catch(err=>{
    ...
});
0 голосов
/ 09 января 2019

onWrite создать одно Обещание, которое Обещание хранится в getDoc,

Вы можете вернуть getDoc.

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