Как только функция возвращает Promise {<pending>} - PullRequest
0 голосов
/ 18 января 2019

Я хочу получить некоторые данные из моей базы данных в реальном времени. Это сработало один раз, но теперь возвращает Promise {pending} '

const userId = admin.database () .ref (/dhabba_orders/{userID}) один раз ( 'значение');.

Приведенный выше код вернул правильное значение один раз и теперь возвращает только 'Promise {pending}'

exports.notificationMake = 
functions.database.ref(`/dhabba_orders/{userId}/status`)
    .onWrite((change, context) => {
  const userId = admin.database()
      .ref(`/dhabba_orders/{userID}`).once('value');
  console.log(userId);  
  const payload = {
    notification: {
      title: `Hi`,
      body: `Hey`
    }
  };
  return admin.messaging().sendToDevice(userId, payload);
});

Ответы [ 2 ]

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

ОБНОВЛЕНИЕ: РЕШЕНИЕ

exports.notificationMake =
functions.database.ref('/dhabba_orders/{user_uid}').onWrite((change, context) => {
    let userId = context.params.user_uid;
    let orderStatus = context.params.order_status;

    Promise.all([userId, orderStatus]).then(others => {
        console.log(userId);  
        console.log(orderStatus);
        const payload = {
        notification: {
            title: `Order Accepted!`
        }
    };
    admin.messaging().sendToDevice(userId, payload);
    return 0;
    }).catch(error => {
        console.log(error);
    });
    return 0;

});

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

Как видно из документации API, once() выполняет запрос асинхронно и возвращает Promise, который можно использовать для получения DataSnapshot в месте запроса в inбаза данных.Однако вы предполагаете, что он просто возвращает значение напрямую.Вместо этого вам нужно будет использовать это обещание, чтобы получить идентификатор пользователя.Ваша функция должна выглядеть примерно так:

exports.notificationMake =
functions.database.ref('/dhabba_orders/{userId}/status').onWrite((change, context) => {
    admin.database().ref(`/dhabba_orders/{userID}`).once('value')
    .then(snapshot => {
        const userId = snapshot.data();
        console.log(userId);  
        const payload = {
            notification: {
                title: `Hi`,
                body: `Hey`
            }
        };
        return admin.messaging().sendToDevice(userId, payload);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...