Узел Js запрос MySql перед отправкой уведомления в Firebase - PullRequest
0 голосов
/ 09 июня 2018

Пожалуйста, как мне сделать запрос MySql и дождаться результата перед отправкой уведомления на устройство.Вот мой код

exports.pushNotification = functions.database
  .ref("/messages")
  .onWrite((change, context) => {
    console.log("Push notification event triggered");
    const payload = {
      notification: {
        title: "Test Message",
        body: "Welcome to Node",
        sound: "default"
      },
      data: {
        title: "Test Message",
        message: "Welcome to Node"
      }
    };
    /* Create an options object that contains the time to live for the notification and the priority. */
    const options = {
      priority: "high",
      timeToLive: 60 * 60 * 24 //24 hours
    };
    var token = new Promise(function(resolve, reject) {
      con.connect(function(err) {
        if (err) {
          reject(err);
        } else {
          con.query("SELECT fcm_token FROM users WHERE id = 24", function(
            err,
            result,
            fields
          ) {
            if (err) {
              reject(err);
            } else {
              token = result[0].fcm_token;
              resolve(token);
            }
          });
        }
      });
    });
    console.log("Token : " + token);
    return admin.messaging().sendToDevice(token, payload, options);
  });

Я получаю следующие ошибки:

enter image description here

1 Ответ

0 голосов
/ 09 июня 2018

Согласно документации sendToDevice не принимает обещание в качестве параметра.Поэтому вам придется вместо этого вызывать sendToDevice с разрешенными токенами и только после этого разрешать / отклонять.

exports.pushNotification = functions.database
  .ref("/messages")
  .onWrite((change, context) => {
    console.log("Push notification event triggered");
    ...
    return new Promise(function(resolve, reject) {
      con.connect(function(err) {
        if (err) {
          reject(err);
        } else {
          con.query("SELECT fcm_token FROM users WHERE id = 24", function(
            err,
            result,
            fields
          ) {
            if (err) {
              reject(err);
            } else {
              token = result[0].fcm_token;
              console.log("Token : " + token);
              admin.messaging().sendToDevice(token, payload, options).then(function() {
                resolve();
              }).catch(function(err) {
                reject(err);
              });
            }
          });
        }
      });
    });

  });
...