【发布时间】:2018-12-05 16:38:30
【问题描述】:
我编写了一个 firebase 函数,用于在我的 android 应用中发生类似事件时发送通知。通知功能在大多数情况下运行良好,但有时不起作用。
我总是收到这个错误(不管它是否工作):
Function returned undefined, expected Promise or value
这是我的like函数的代码:
exports.sendactorLikeNotification = functions.database.ref('/Likes/{post_id}/{user_id}')
.onWrite(event => {
if (event.data.exists())
{
const message = event.data.val();
const userUid = event.params.user_id;
const ownerUid = message.owner_id;
console.log("Owner id", ownerUid);
const userPic = message.thumb_image;
const userName = message.name;
const post_key = event.params.post_id;
const timestamp = admin.database.ServerValue.TIMESTAMP;
if(ownerUid == userUid){return null;}
const Promise1= admin.database().ref(`/notifs/${ownerUid}`).push({
thumb_image: userPic,
name: userName,
user_id: userUid,
post_id: post_key,
text: "liked your post",
type: "Like",
read: "false",
time: timestamp
});
const Promise2=admin.database().ref(`/Users/${ownerUid}/device_token`).once('value');
const Promise3= Promise2.then(function(snapshot) {
const getrealDeviceTokensPromise = snapshot.val();
console.log("Device Token", getrealDeviceTokensPromise);
// Notification details.
const payload = {
notification: {
title: 'Appname',
body: userName + ' has liked your post.',
icon: "default",
sound: "default",
click_action: "OPEN_ACTIVITY_1"
}
};
const Promise4= admin.messaging().sendToDevice(getrealDeviceTokensPromise, payload)
.then(function (response) {
console.log("Successfully sent message:", response);
return Promise.all([Promise1,Promise3,Promise4]);
})
.catch(function (error) {
console.log("Error sending message:", error);
return null;
});
}, function(error) {
// The Promise was rejected.
console.error(error);
return null;
});
}
else
{
return null;
}
});
我不明白我哪里出错了。请帮忙!
【问题讨论】:
-
一些观察。 1)您的代码很难按照此处的格式进行操作。 2) 您使用的是真正旧版本的 firebase-functions SDK - 考虑升级到最新的 1.x 版本并将您的代码迁移到新的 API。
-
嘿,对于破旧的格式感到抱歉。我在编辑中对其进行了改进。
-
我不认为你有所有的代码。上次你打电话给 Promise.all。
-
是的,我错过了。这是现在的整个代码。请仔细查看
标签: javascript firebase firebase-cloud-messaging google-cloud-functions