app.get('/getProcessList', (req, res) => { let parentPath = path.dirname(currentDirectory); //查看进程是否挂掉,若挂掉,非手动关闭将重新拉起 console.log("进入接口==") scanAndStart() let cacheData; while (true){ setTimeout(()=>{ cacheData = getCache(); if (cacheData){ status =true; break } },2000) } return res.send(cacheData);这段代码有什么问题么
时间: 2024-04-13 14:30:12 浏览: 87
Express之get,pos请求参数的获取
这段代码存在一些问题。首先,在Node.js中使用while循环会阻塞事件循环,导致后续代码无法执行。而且,setTimeout函数是一个异步操作,无法在while循环中使用break语句。另外,异步操作应该使用回调函数或者Promise来处理结果,而不是在循环中等待结果。
建议使用适当的异步操作来解决这个问题。可以将setTimeout函数的回调函数封装成一个Promise对象,并使用async/await来处理异步操作。以下是修改后的代码示例:
```javascript
app.get('/getProcessList', async (req, res) => {
let parentPath = path.dirname(currentDirectory);
console.log("进入接口==");
scanAndStart();
let cacheData;
while (true) {
await new Promise((resolve) => {
setTimeout(() => {
cacheData = getCache();
if (cacheData) {
resolve();
}
}, 2000);
});
if (cacheData) {
break;
}
}
return res.send(cacheData);
});
```
这样修改后,代码会等待2秒钟后再次尝试获取缓存数据,直到成功获取到结果为止。同时不会阻塞事件循环,允许后续代码继续执行。
阅读全文