【发布时间】:2020-06-07 10:48:49
【问题描述】:
我正在创建一个谷歌云功能,该功能每天向用户发送一封电子邮件,但该功能仅在部署后第一次调用,然后即使在 300 秒后也总是因超时而失败(通常需要 10 - 15 秒才能执行) .
该函数正在执行 DB 查找、for 循环和 if 条件,所以我认为这是来自应用程序的请求/响应问题,因此它会阻止将来调用。你能帮我修改下面的代码吗?
app.get('/emails', function(req, res){
var books = [];
Book.find({}, (err, res) => {
if (err) {
return err;
}
books = res;
}).catch(err => console.log(err))
User.find({}, (err, users) => {
if (err) {
return err;
}
const uniques = users.filter(
(v, i, a) => a.findIndex((t) => t.ID === v.ID) === i
);
for(var i =0; i < uniques.length; i++) {
var count = 0;
for (var j = 0; j < books.length; j++) {
if (books[j].UserID === uniques[i].ID && books[j].State === "OK") {
count += 1;
}
}
var EmailPayload = {
// nodemailer object here
}
if (count > 0) {
Email.sendEmailIndex(EmailPayload);
}
}
}).catch(err => {
console.log(err)
})
});
【问题讨论】:
-
如果您添加了
console.log语句并包含执行日志以了解停止执行的位置,这将非常有用。 -
函数究竟是如何触发的?
-
它是由HTTP调用GET /cloud/emails触发的,部署后第一次调用然后日志总是说超时
标签: node.js express google-cloud-platform google-cloud-functions timeout