我在令牌变量中获取值,但是代码产生错误,表明函数应返回promise或value。我要访问令牌的原因是向接收者发送有关已接收请求的通知。我的问题代码段如下所示。
const functions = require('firebase-functions');
var admin = require('firebase-admin');
var promise=require('promise');
admin.initializeApp();
exports.sendRequestReceivedNotification=functions
.database
.ref('/Requests/{receiverID}/receivedFrom/{senderID}')
.onCreate((snapshot,context)=>{
const receiverID= context.params.receiverID;
const senderID=context.params.senderID;
console.log(senderID,' sent message to ',receiverID);
admin.database().ref()
.child('DeviceTokens')
.child(receiverID)
.child('deviceToken')
.once('value')
.then(function(snapshot){
var token=snapshot.val();
console.log(token);
return true;
})
.catch(function(error){
return false;
});
});
在部署,运行和触发功能时,出现以下快照所示的错误。 我已经用谷歌搜索了promises,然后使用了then()。catch()结构,但无法掌握,而且这种错觉对我来说从来都不是很清楚... :(
返回未定义的值:
有人能在这里解释这个问题并对此采取补救措施吗?
答案 0 :(得分:0)
函数返回undefined
的原因是,您永远不会从中返回值。要返回复杂计算的结果(包括所有承诺),请在开始链之前添加return
:
return admin.database().ref()
// all other calls
当然,您可以将结果存储到变量中,然后再返回:
const result = admin.database().ref() // and the rest of the chain
// other things you do
return result;
返回值的另一种方法(在此特定情况下不是很有用,但理论上可以使您免于出现此问题),是使用arrow functions的短语法,因为无论如何都使用它们:>
// in case the body of a function can be a single expression,
// it is returned implicitly
(param1, param2, …, paramN) => expression