如果「暫停」你的意思是「還呼籲worker.postMessage()
將得到排隊,而不是由工人加工」,則沒有,你不能使用setTimeout()
這一點。 setTimeout()
不是一個忙碌的等待,而是一個延遲工作直到後來的預定時間的線程內機制。網絡工作者在發佈後仍會從主隊列中收到新的onmessage
事件。
但是,您可以執行的操作是手動排隊,然後使用setTimeout嘗試稍後處理它們。例如:
worker.js
var workQueue = [];
addEventListener('message',function(evt){
workQueue.push(evt.data);
doStuff();
},false);
function doStuff(){
while (!databaseBusy()) doStuffIndeed(workQueue.shift());
if (workQueue.length) setTimeout(doStuff,1000);
}
- 每接收到一個消息的工作並將其放入一個隊列,並調用
tryToProcess
時間。
tryToProcess
只要數據庫可用,就一次從隊列中取出一條消息。
- 如果數據庫不可用並且有留言,則會在1秒內再次嘗試。
爲什麼不使用'setInterval()'而不是如果你想重複? – Lloyd
當數據庫停止繁忙時,我想停止它。 –
@MishaSlyusarev然後在條件滿足後使用'clearInterval()'。 – Sirko