我正在使用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部署”时遇到以下错误
有人可以帮我吗,谢谢。
答案 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
});