每个then()应返回一个值或抛出promise / always-return

时间:2018-04-02 02:37:15

标签: javascript node.js firebase google-cloud-functions eslint

我正在创建推送通知应用程序,我使用node.js来部署firebase功能,但在部署时显示错误。

  

警告避免嵌套承诺承诺/不嵌套

     

警告避免嵌套承诺承诺/不嵌套

     

错误每个then()都应返回或抛出promise / always-return

这是我的代码:

"use-strict";

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

exports.sendNotification = functions.firestore
  .document("Users/{user_id}/Notification/{notification_id}")
  .onWrite(event => {
    const user_id = event.params.user_id;
    const notification_id = event.params.notification_id;

    return admin
      .firestore()
      .collection("Users")
      .doc(user_id)
      .collection("Notification")
      .doc(notification_id)
      .get()
      .then(queryResult => {
        const from_user_id = queryResult.data().from;
        const from_message = queryResult.data().message;
        const from_data = admin
          .firestore()
          .collection("Users")
          .doc(from_user_id)
          .get();
        const to_data = admin
          .firestore()
          .collection("Users")
          .doc(user_id)
          .get();

        return Promise.all([from_data, to_data]).then(result => {
          const from_name = result[0].data().name;
          const to_name = result[1].data().name;
          const token_id = result[1].data().token_id;
          const payload = {
            notification: {
              title: "Notification From :" + from_name,
              body: from_message,
              icon: "default"
            }
          };

          return admin
            .messaging()
            .sendToDevice(token_id, payload)
            .then(result => {
              console.log("Notification Sent.");
            });
        });
      });
  });

2 个答案:

答案 0 :(得分:3)

您没有提到错误的位置。我认为错误将在行

console.log("Notification Sent.");

如果你这样做

return console.log("Notification Sent.");

错误应该消失,而警告仍然存在。

正如马科斯上面提到的,最好是将承诺链接起来而不是嵌套。

答案 1 :(得分:0)

const token=result[1].data.Token;

const payload = {
notification : {
title : "Notificatiion from : " + from_email,
body : from_meg,
icon : "Default"
}
};
return admin.messaging().sentToDevice(token,payload).then(result => {
return console.log("sent");
});
});

1)Firestore中存储的Date对象的行为将改变 而且您的应用可能会崩溃。 要隐藏此警告并确保您的应用不会中断,您需要添加 在调用任何其他Cloud Firestore方法之前,将以下代码添加到您的应用中: 2)admin.messaging(...)。sentToDevice不是一个函数  firebase部署完成,但是在日志中显示了这两个错误。.plz hellp