일련의 작업을 수행 할 미들웨어를 작성하고 있습니다. 시퀀스가 완료된 후 미들웨어가 next()를 호출하기를 원합니다. 미들웨어의이 시점부터 중복됩니다. (의 setTimeout의 호출에 의해 조롱 여기에 일련의 작업) : 나는 다음과 같은 코드를 작성했습니다 작업이 완료되기 전에 둘 이상의 요청이 도착하면nodejs 미들웨어 요청 지연
가function myMiddleware(req, res, next){
console.info("inside myMiddleware");
if (actionDone) {
console.info("middleware redundant. ActionDone, calling next");
next();
}
setTimeout(doneWaiting, 30000);
function doneWaiting(){
actionDone = true;
next();
}
}
이 코드 때문에 작동하지 않습니다에서는 setTimeout 거듭 불려질 것입니다. setTimeout을 한 번만 호출하면됩니다. 완료된 경우에만 지금까지 도착한 모든 요청에 대해 next()를 호출하려고합니다.
이것을 달성하는 가장 좋은 방법은 무엇입니까?
감사합니다, 리
난 당신이 작업을 수행하고 작업이 완료되면 모든 요청을 처리하려면 제대로 이해하고
감사합니다,
req
에, 어쩌면 이것은 나쁜 생각이지만 나는 확실히 어떤 동작을 수행 할 경우 내가해야 할 일을 제안 할 내 요청을 처리하기 전에? 내 모든 요청이 작성하는 데 시간이 걸릴 수있는 테이블 작성에 의존한다고 가정 해보십시오.이 경우 더 나은 접근 방법이 있습니까? – user429400@ user429400 필자는 주기적으로 (예 : 초당 한 번) 정기적으로 테이블을 준비했는지 여부를 확인하는 자체 참조 기능을 넣는 것이 좋습니다 (물론 준비가되어 있음을 플래그로 표시해야합니다). 예를 들어 5 번 시도한 후에는 루프를 중단하고 '미안, 준비되지 않은 테이블 - 나중에 다시 시도하십시오'(이것은 요청이 내부적으로 루프되지 않는지 확인하는 것입니다)로 응답해야합니다. 그것이 내가 그렇게 할 수있는 방법이다. 또한 상자 밖에서 확장 가능합니다 (테이블을 저장하기 위해 데이터베이스를 사용한다고 가정). – freakish