在我的应用程序中,用户可以订阅许多主题(在这种情况下,主题是音乐家)。每天我都会运行一个查询来检查发布新音乐的音乐家,然后对于跟随这些音乐家的用户,他们会收到一条通知,内容为{MusicianName} has released a new song!
。
这是我查询今天发布歌曲的所有主题(又名音乐家)的方法:
axios.get(`${apiURL}/submission/approvals?releaseDate={currentDay}`).then((response) => {
var artistUIDs = response.data.map((sub: any) => {
return { artistUID: sub.Artist.artistUID, artistName: sub.Artist.name, title: sub.title }
});
sendTopics(artistUIDs)
})
然后我运行forEach
发送每个个性化通知:
function sendTopics(topics) {
topics.forEach((topic: any) => {
var message = {
notification: {
title: `New music from ${topic.artistName}!`,
body: `Listen to "${topic.title}" now`
},
topic: topic.artistUID
};
// Send a message to devices subscribed to the provided topic.
admin.messaging().send(message)
.then((response) => {
// Response is a message ID string.
console.log('Successfully sent message:', response);
})
.catch((error) => {
console.log('Error sending message:', error);
});
})
}
我的问题似乎是,如果使用admin.messaging.send()
同时发送多个主题,我会收到一条错误消息,指出所有请求都已超时。如果只有一个主题需要发送,那么效果很好!这是因为topics.forEach
在解决之前send()
循环很快吗?在继续下一个操作之前,我需要做些什么来确保send方法能够解析?
这是我的错误消息,如果我尝试使用forEach批量发送20个不同的主题,则会在Firebase功能日志中收到以下消息中的20条:
errorInfo:
{ code: 'app/network-timeout',
message: 'Error while making request: timeout of 10000ms exceeded.' },
codePrefix: 'app' }