问题
我有一个路径(/mediumData
)在网站的每个页面重新加载时调用。以下是路由的快速路由器处理程序:
router.get("/mediumData", (request, response) => {
getMediumData
.then(mediumData => {
response.json(mediumData)
})
.catch(error => {
response.send(error)
})
});
我遇到的问题是promise
getMediumData
只在服务器重新启动时调用,而不是像预期的那样在每个页面加载时调用。我试过的
当我试着用
console.log
语句调试代码时,我发现console.log
正在getMediumData.then
处理程序内部执行(页面刷新)。但是,getMediumData
承诺不会在页面刷新时执行任何console.log
语句(只有在服务器重新启动时才会执行console.log
)。下面是一个关于我的
console.log
调试的例子:getMediumData.then
处理程序router.get("/mediumData", (request, response) => {
getMediumData
.then(mediumData => {
console.log("This text gets outputted on every page refresh.");
response.json(mediumData)
})
.catch(error => {
response.send(error)
})
});
getMediumData
承诺const getMediumData = new Promise((resolve, reject) => {
console.log("This text only gets outputted on server restarts.");
https
.get(
// Some stuff...
)
});
最佳答案
承诺只能解决/拒绝一次,这只是它们的工作方式。因此,这里的一个简单解决方案是将现有的getMediumData
promise包装在一个函数中,该函数为每个请求创建一个新的promise。
例如:
const getMediumData = () => new Promise((resolve, reject) => {
https
.get(
// Some stuff...
)
});
router.get("/mediumData", (request, response) => {
getMediumData().then(mediumData => {
response.json(mediumData)
}).catch(error => {
response.send(error)
});
});