javascript - firebase 函数返回未定义的、预期的 Promise 或值
问题描述
嗨,这是我也想用来将朋友请求通知从一个应用程序发送到另一个 android 应用程序的代码。
但我undefined
在函数控制台中收到函数返回、预期的承诺或值错误,而且我没有得到令牌值..
我的代码如下...
'use-strict'
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
exports.sendNotification = functions.firestore
.document("users/{user_id}/notifications/{notification_id}")
.onWrite((change,context)=>{
const user_id = context.params.user_id;
console.log("We have a notification to send to", user_id);
var ref = db.collection('device_token').doc(user_id);
var getDoc = cityRef.get().then(doc=>{
if (!doc.exists) {
return console.log('No such document!');
} else {
console.log('Document data:', doc.data());
const payload = {
notification: {
title: "Text.",
body: "You have a new Friend Request!",
icon: "default"
}
}
return admin.messaging().sendToDevice(tockenDoc, payload).then(response=>{
return console.log("Notification sent : success");
});
}
}).catch(err=>{
console.log('Error getting document', err);
});
});
解决方案
由后台操作触发的函数(例如在您的情况下写入 Firestore)并执行异步操作(例如sendToDevice()
在您的代码中写入),需要返回一个值或一个承诺以明确它们何时完毕。您没有返回任何内容,因此 Cloud Functions 抱怨它不知道代码何时完成。
由于您没有在getDoc
任何地方使用该变量,因此您不妨将其返回。从return admin.messaging().sendToDevice()
那里开始会冒泡,并为 Cloud Functions 提供所需的信息,以了解让函数的容器保持活动状态所需的时间。
return cityRef.get().then(doc=>{
...
}).catch(err=>{
...
});
推荐阅读
- angular - 当一个动作被派发时做某事
- mysql - Mysql查询以获取具有两个日期输入的from和to列之间的记录
- solr - 如何在 Bitnami 认证的 Apache Solr 上创建新内核?
- r - NA <10 连续 NA 时的插补值
- android-studio - Android Studio - 无法应用插件 [id 'com.android.application'] - Flutter
- c# - 在后台工作人员上运行的 Http 侦听器
- c# - Ocelot API Gateway - 分配微服务的最佳 url 模板?
- javascript - 使用表单上传文件
- javascript - 如何将中间件传递给express node.js中的指定路由
- javascript - 如何调试/捕获 D3 的错误