函数返回未定义,预期Promise或值和通知长时间延迟
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数返回未定义,预期Promise或值和通知长时间延迟相关的知识,希望对你有一定的参考价值。
我在执行代码时得到firebase返回undefined,期望的promise或value,此外还需要花很长时间才能发送通知
'use-strict'
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.channelNotification = functions.database.ref('/ChannelMessages/{channelid}/{messageid}').onCreate(event => {
const channelid1 = event.params.channelid;
admin.database().ref('/Channels/' + channelid1 + '/Users').on("child_added", function (snapshot, childkey) {
admin.database().ref('/Channels/' + channelid1 + '/Users/' + childkey + '/deviceToken').once('value',function(token){
admin.database().ref('/Channels/' + channelid1 + '/name').once('value',function(name){
admin.database().ref('/Channels/' + channelid1 + '/profilePic').once('value',function(pp){
const payload = {
data: {
"title" : name,
"body" : event.data.val().content,
"icon" : pp,
"id" : channelid1,
"type" : "channel"
}
};
return admin.messaging().sendToDevice(token, payload).then(response => {
console.log('nice feature');
});
});
});
});
});
});
答案
您需要从完成所有异步工作时解析的函数返回一个promise。现在,您将返回未定义的值。
除此之外,您不应该在云函数中使用on()
进行查询。您应该只使用once()
一次获取一个值。您的第一个查询是使用on()
,但其他人使用的是once()
。
最后,如果使用once()返回的promises链接查询而不是使用回调深度嵌套,则函数将更易于读写。
以上是关于函数返回未定义,预期Promise或值和通知长时间延迟的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 云函数 - 返回未定义、预期的 Promise 或值
Firebase 云函数错误:函数返回未定义、预期的 Promise 或值
函数以状态完成:'ok',但控制台日志显示函数返回未定义、预期的 Promise 或值
Cloud Functions 错误:函数返回未定义、预期的 Promise 或值,以及 TypeError:无法读取未定义的属性“First_Name”