Heim >Web-Frontend >js-Tutorial >Eine kurze Diskussion darüber, wie man eine asynchrone Aufgabenwarteschlange mithilfe der JS-Blockierungsmethode implementiert?
Wie implementiert man eine asynchrone Aufgabenwarteschlange mit JavaScript und verarbeitet alle Aufgaben in der Warteschlange der Reihe nach? In diesem Artikel erfahren Sie, wie Sie eine asynchrone Aufgabenwarteschlange mithilfe der JavaScript-Blockierungsmethode implementieren.
Es besteht die Anforderung, eine asynchrone Aufgabenwarteschlange zu implementieren und alle Aufgaben in der Warteschlange nacheinander wie folgt zu verarbeiten:
Asynchrone Aufgaben zu zufälligen Zeiten zur Warteschlange hinzufügen
Warteschlange Die Aufgaben werden nacheinander gemäß der First-In-First-Out-Regel ausgeführt. Die Aufgaben sind asynchrone Anforderungen. Warten Sie, bis eine Ausführung abgeschlossen ist, bevor Sie die nächste ausführen. Diese Anforderung ist einfach zu implementieren Verwenden von BlockingQueue in der Java-Sprache, aber JavaScript verfügt nicht über einen Sperrmechanismus. Dies ist nicht so einfach zu implementieren.
<body> <button onclick="clickMe()">点我</button> </body>
let queue = [] let index = 0 function clickMe() { queue.push({name: 'click', index: index++}) } run() async function run() { while (true) { if (queue.length > 0) { let obj = queue.shift() let res = await request(obj.index) console.log('已处理事件' + res) } else { await wait(500) console.log('----- 队列空闲中 -----') } } } // 通过setTimeout模拟异步请求 function request(index) { return new Promise(function (resolve, reject) { setTimeout(() => { resolve(index) }, 1000) }) } function wait(time) { return new Promise(function (resolve) { setTimeout(() => { resolve() }, time) }) }
Die Leerlaufwarteschlange wird immer noch in einer Schleife verarbeitet und verbraucht Ressourcen. Das Erkennungsintervall ist schwer zu erfassen. Wenn das Intervall zu lang ist, kann die Warteschlangenaufgabe nicht verarbeitet werden, und das Erkennungsintervall ist zu kurz, was verbraucht Ressourcen
Ist es wie BlockingQueue in Java? Wie wäre es mit einer Möglichkeit, zu blockieren, wenn die Warteschlange inaktiv ist und keine Ressourcen verbraucht?
Option 2Programmiervideos
! !Das obige ist der detaillierte Inhalt vonEine kurze Diskussion darüber, wie man eine asynchrone Aufgabenwarteschlange mithilfe der JS-Blockierungsmethode implementiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!