错误“ firebase部署”时出现意外的函数表达式

时间:2019-02-07 07:29:31

标签: firebase react-native firebase-realtime-database google-cloud-functions expo

我正在使用React-Native和Expo。 我正在为我的应用程序进行推送通知。 当用户收到新任务时,它将通过博览会显示通知。

这是Firebase index.js的代码

const functions = require('firebase-functions');
var fetch = require('node-fetch')



const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

//send the push notification 
exports.sendPushNotification = 
functions.database.ref('Task/').onCreate(event => {

const root = event.data.ref.root
var messages = []

//return the main promise 
return root.child('/users').once('value').then(function (snapshot) {
    snapshot.forEach(function (childSnapshot) {

        var expoToken = childSnapshot.val().expoToken;

        messages.push({
            "to": expoToken,
            "sound": "default",
            "body": "New Task Added"
        });
    });
    //firebase.database then() respved a single promise that resolves
    //once all the messages have been resolved 
    return Promise.all(messages)

})
    .then(messages => {
        // console.log(messages)
        fetch('https://exp.host/--/api/v2/push/send', {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(messages)

        });
    })
    .catch(reason => {
        console.log(reason)
    })


});

我做“ firebase部署”时遇到以下错误

enter image description here

有人可以帮我吗,谢谢。

2 个答案:

答案 0 :(得分:0)

查看错误消息,似乎错误是由于您在以下then中未返回任何内容而引起的:

.then(messages => {
        // console.log(messages)
        fetch(...);
})

我从未使用过node-fetch,但是根据文档,您似乎只需要返回fetch()返回的promise,如下所示:

.then(messages => {
        // console.log(messages)
        return fetch(...);
})

请注意,这不仅从eslint角度来看很重要,而且对于正确执行Cloud Function也很重要。我建议您观看Firebase视频系列中有关“ JavaScript承诺”的3个视频:https://firebase.google.com/docs/functions/video-series/


最后,请注意,eslint还会在using arrow functions for callbacks上发出警告。

您可以修改以下代码

return root.child('/users').once('value').then(function (snapshot) {})

return root.child('/users').once('value').then(snapshot => {})

snapshot.forEach(function (childSnapshot) {})相同。

答案 1 :(得分:0)


从此


 facts = queryRecords().then(function(result) {
    return result.data 
}).catch(function(error) {
    facts = error 
});

对此


 facts = queryRecords().then(result => {
    return result.data 
}).catch(error => {
    facts = error 
});