javascript - Firebase 云功能 - 如何解决此错误:ECONNRESET
问题描述
这是我的代码
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const axios = require('axios');
admin.initializeApp(functions.config().functions);
exports.sendNotifications = functions
.region('europe-west1')
.pubsub.schedule('every day 04:00').onRun(async context => {
axios.get('http://niksimoni.pythonanywhere.com/api/pulizie_domani')
.then(listOfStreets => {
const streets = listOfStreets.data.strade;
const promises = [];
for (const street of streets) {
const p = axios.get('http://niksimoni.pythonanywhere.com/api/data_pulizie?indirizzo=' + street)
.then(listOfHours => {
const ora = listOfHours.data.ora;
var topic = street.split(" ").join("-");
var message = {
data: {
title: street,
subtitle: 'Pulizia domani alle ' + ora,
},
topic: 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);
});
})
promises.push(p);
}
return Promise.all(promises);
})
.catch(error => {
console.log(error);
});
});
我尝试用请求替换 axios 但它没有解决问题,无论我更改什么我总是收到此错误:'发出请求时出错:客户端网络套接字在建立安全 TLS 连接之前已断开连接。错误代码:ECONNRESET' 我试图学习如何处理承诺,我以为我理解它,但也许我错了。任何帮助将不胜感激
解决方案
始终在云函数中返回承诺:
return axios.get('http://niksimoni.pythonanywhere.com/api/pulizie_domani')
这也是:
return admin.messaging().send(message)
否则,云函数会突然终止正在执行的代码。你可能也想对你的 catch 块做同样的事情。您可以在此处阅读更多相关信息:https ://firebase.google.com/docs/functions/terminate-functions
推荐阅读
- python - 测试依赖于另一个函数的代码的运行时间
- react-native - 如何重置抽屉导航器打开的屏幕状态?
- python - 在 KIVY 中使用标签面板
- javascript - Javascript如何每n秒显示一次随机用户?
- r - 将条目附加到 R 中的向量是按预期生成列表而不是向量
- javascript - 如何为 typescript 制作 Graphql 代码生成器,使其枚举成为帕斯卡大小写而不是蛇形大小写?
- kotlin - ktor hocon 配置不适用于一个密码变量
- c# - EF Core 向实体添加额外的列
- mysql - 如何修复无效使用组功能错误?
- xml - .net 核心 svcutil/soap 服务 - 无法序列化 MessageBodyMemberAttribute