Heute habe ich einen Artikel gesehen, der ein unendliches Verknüpfungsmenü implementiert. Ich habe gesehen, dass der Autor es beim Umgang mit dem Datenablauf nicht verstanden hat
- Was man sich leicht vorstellen kann, ist das Problem des asynchronen Ablaufs: Stellen Sie sich vor, dass sich das Menü der ersten Ebene ändert und das Abrufen des Inhalts des Menüs der zweiten Ebene auslöst, die Netzwerkgeschwindigkeit jedoch langsam ist und der Vorgang 3 Sekunden dauert . Nach 1 Sekunde wechselt der Benutzer erneut zum Menü der ersten Ebene, wodurch der Inhalt des Menüs der zweiten Ebene erneut abgerufen wird. Zu diesem Zeitpunkt ist die Netzwerkgeschwindigkeit höher, die Daten werden nach 1 Sekunde zurückgegeben und das Menü der zweiten Ebene wird erneut aufgerufen. Das Menü der ersten Ebene wird jedoch erneut gerendert. Das Ergebnis dieser Anforderung wird jedoch erneut gerendert hat sich seitdem geändert und der Inhalt ist abgelaufen. Diese Darstellung ist falsch. Wir können Schließungen verwenden, um eine Datenablaufprüfung durchzuführen.
- Was nicht leicht vorstellbar ist, ist das Problem des synchronen Ablaufs (eigentlich ist es auch asynchron, aber ohne Io-Interaktion handelt es sich um eine Timeout-Funktion mit einer Pufferzeit von 0). Wenn Sie nicht aufpassen, kann es zu einem Ablauf der Warteschlange kommen. Im Code finden Sie entsprechende Hinweise.
Können Sie den Grund für den ersten Ablauf herausfinden? Was ist der Grund für den zweiten? Wie ist es passiert?
作者说了嘛,就是缓冲时间为0的timeout函数.第一级菜单对第二级菜单的更新如果是写在setTimeout()函数中,就是异步操作,同样会出现后面操作先更新界面,前面操作结果过期.