部署 Firebase 推送通知功能时出错

Posted

技术标签:

【中文标题】部署 Firebase 推送通知功能时出错【英文标题】:Error on deploy of firebase push notification function 【发布时间】:2018-03-11 04:53:33 【问题描述】:

我正在尝试为我的应用使用 Firebase 推送通知服务。为此,我在我的应用程序中设置了 firebase 推送通知依赖项,并且还安装了 node.js 和 firebase 工具。当我在目录上使用 firebase deploy 来部署功能时,我收到此错误

40:14  warning  Avoid nesting promises                      promise/no-
nesting
41:25  error    Each then() should return a value or throw  promise/always-
return

✖ 2 problems (1 error, 1 warning)

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! functions@ lint: `eslint .`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the functions@ lint script.
npm ERR! This is probably not a problem with npm. There is likely additional 
logging output above.

这是 index.js 文件

'use strict'


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

exports.sendNotification = functions.database.ref('/Notifications/receiver_id/notification_id')
       .onWrite(event => 
	   
		   const receiver_id = event.params.receiver_id;
		   
		   const notification_id = event.params.notification_id;
		   
		   console.log('We have a notification to send to : ', receiver_id);
		   
		   if(!event.data.val()) 
		   
			   return console.log('A notification has been deleted from the database : ', notification_id);
		   
		   
		   
		   const deviceToken = admin.database().ref(`/Users/$receiver_id/device_token`).once('value');
		   
		   
		   return deviceToken.then(response => 
		   
			   const token_id = result.val();
			   
			   const payload = 
			   
				   notification: 
				   
					   title: "Friend Request",
					   body: "You have a new friend request",
					   icon: "default"
				   
			   ;
			   
			   return admin.messaging().sendToDevice(token_id, payload)
			               .then(response => 
						   
							   console.log('This was the notification feature');
						   );
	        );  	  
       );
	   

我该如何解决这个问题?我的朋友使用相同的代码,它成功上传,没有错误

【问题讨论】:

【参考方案1】:

来自 ESLint 的错误信息是这样的:

41:25  error    Each then() should return a value or throw  promise/always-return

它抱怨的代码是这样的:

                       .then(response => 
                       
                           console.log('This was the notification feature');
                       );

消息是说每个 then() 方法回调都应该返回一个值或抛出一个异常。如果您在日志后的回调中简单地 return null 可能会有所帮助。

您还会收到有关嵌套承诺的警告。您的代码在另一个 then() 中不使用 then() 更具可读性。您可以简单地将它们在同一级别上相互链接以获得相同的效果。

【讨论】:

以上是关于部署 Firebase 推送通知功能时出错的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 云功能不发送异步推送通知

Firebase 云功能推送通知

Cordova 中的后台 Firebase 推送通知

Firebase云功能推送通知

iOS 应用未收到来自 Firebase 的后台推送通知

没有收到来自 Firebase 控制台的推送通知