【发布时间】:2022-01-26 16:22:59
【问题描述】:
一个很小的例子
let value = null;
const getValues = () => {
fetch('/third-party-api')
.then(res => res.json())
.then(data => {
value = data;
})
}
getValues();
app.get("/values", async (req, res) => {
res.json(value);
});
当它被部署时,它会工作。 但是在 x 时间后(有时是几个小时,有时它会工作一整天),该值将恢复为空。 我为 Heroku 付费,所以服务器永远不会休眠,这就是为什么发生这种情况对我来说没有意义。
我可以以某种方式阻止这种情况,因此该值不会恢复为 null 吗?
我为什么要这样做:
第三方 API 非常庞大,大约需要 30 秒才能获取。所以我只是创建了这个小 API 来添加分页,并且只在构建时调用第三方
【问题讨论】:
-
我看不出这不起作用的原因。如果可能,尝试将“值”设置为全局变量。
global.value = null -
get('/values'函数调用不等待值存在。请看一下我链接的问题。 -
嗨@evolutionxbox - 感谢您的回复。我知道我首先能够在 getValues 完成后调用 /values。部署后等待 1-2 分钟就足够了,在这里它可以工作。问题是为什么它会回到 null
-
我怀疑这个例子被简化到我们错过了实际问题的地步。每次你的应用启动时你都会打电话给
getValues()吗? Heroku dynos 经常重启,至少每天一次,因为这只是在内存中,你必须再次获取数据。
标签: javascript node.js express heroku