다른 스레드에 영향을주지 않고 node.js에서 스레드를 잠자는 방법은 무엇입니까?
당으로 Node.js를 이벤트 루프 이해 , 지원을 단일 스레드 모델을 Node.js를. 즉, node.js 서버에 여러 요청을하면 각 요청에 대해 새 스레드를 생성하지 않고 각 요청을 하나씩 실행합니다. 내 node.js 코드의 첫 번째 요청에 대해 다음을 수행하고 노드에 새 요청이 들어오는 동안 두 번째 요청은 5 초의 휴면 시간을 포함하여 첫 번째 요청이 완료 될 때까지 기다려야 함을 의미합니다. 권리?
var sleep = require('sleep');
sleep.sleep(5)//sleep for 5 seconds
두 번째 요청이 첫 번째 요청이 완료 될 때까지 기다릴 필요가 없도록 node.js가 각 요청에 대해 새 스레드를 생성 할 수있는 방법이 있습니까? 아니면 특정 스레드에서만 sleep을 호출 할 수 있습니까?
npm 모듈 sleep을 참조하는 경우 readme에서 sleep
실행을 차단합니다. 그래서 당신이 옳습니다-그것은 당신이 원하는 것이 아닙니다. 대신 차단되지 않는 setTimeout 을 사용하고 싶습니다 . 다음은 그 예입니다.
setTimeout(function() {
console.log('hello world!');
}, 5000);
es7 async / await를 사용하여이 작업을 수행하려는 사람에게이 예제가 도움이 될 것입니다.
const snooze = ms => new Promise(resolve => setTimeout(resolve, ms));
const example = async () => {
console.log('About to snooze without halting the event loop...');
await snooze(1000);
console.log('done!');
};
example();
각 요청에 비동기 요청이있는 루프가 있고 각 요청 사이에 특정 시간이 필요한 경우 다음 코드를 사용할 수 있습니다.
var startTimeout = function(timeout, i){
setTimeout(function() {
myAsyncFunc(i).then(function(data){
console.log(data);
})
}, timeout);
}
var myFunc = function(){
timeout = 0;
i = 0;
while(i < 10){
// By calling a function, the i-value is going to be 1.. 10 and not always 10
startTimeout(timeout, i);
// Increase timeout by 1 sec after each call
timeout += 1000;
i++;
}
}
이 예제는 다음 요청을 보내기 전에 각 요청 후 1 초를 기다립니다.
deasync 모듈을 고려하십시오 . 개인적으로 모든 기능을 비동기로 만드는 Promise 방법이 마음에 들지 않으며 키워드 async / await anythere가 마음에 들지 않습니다. 그리고 공식 node.js는 이벤트 루프 API를 노출하는 것을 고려해야한다고 생각합니다. 이것은 콜백 지옥을 간단히 해결할 것입니다. Node.js는 언어가 아닌 프레임 워크입니다.
var node = require("deasync");
node.loop = node.runLoopOnce;
var done = 0;
// async call here
db.query("select * from ticket", (error, results, fields)=>{
done = 1;
});
while (!done)
node.loop();
// Now, here you go
'IT TIP' 카테고리의 다른 글
Entity Framework로 단일 열을 선택하는 방법은 무엇입니까? (0) | 2020.12.03 |
---|---|
Vim에서 긴 Git 커밋 메시지를 자동으로 래핑 (0) | 2020.12.03 |
무결성 제약 위반 : 1452 하위 행을 추가하거나 업데이트 할 수 없습니다. (0) | 2020.12.03 |
'요소'초기화는 '케이스'레이블에서 건너 뜁니다. (0) | 2020.12.03 |
명령 줄 도구를 사용하여 파일의 줄 길이 계산 (0) | 2020.12.03 |