函数返回未定义,应返回承诺或值

时间:2018-07-09 12:02:27

标签: javascript node.js firebase firebase-cloud-messaging

我在令牌变量中获取值,但是代码产生错误,表明函数应返回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()结构,但无法掌握,而且这种错觉对我来说从来都不是很清楚... :(

返回未定义的值:

enter image description here

有人能在这里解释这个问题并对此采取补救措施吗?

1 个答案:

答案 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