Javascript – asynchrone Ausführungsreihenfolge in jedem Deklarationszyklus in React
黄舟
黄舟 2017-07-05 10:56:58
0
1
804
componentWillMount(){ setTimeout(()=>{ alert(1); },100) } componentDidMount(){ setTimeout(()=>{ alert(2); },100) }

Die beiden Lebenszyklusfunktionen in der Komponente haben asynchrone Vorgänge. Entspricht die Ausführungsreihenfolge strikt der Reihenfolge des Deklarationszyklus, also zuerst 1 und dann 2? Reihenfolge der Einfügung in die Nachrichtenwarteschlange? Das Problem kann unter der Annahme verstanden werden, dass die Rückgabezeit des asynchronen Ergebnisses von ComponentWillMount sehr lang und die Rückgabezeit des asynchronen Ergebnisses von ComponentDidMount sehr kurz ist. Ist es möglich, zuerst das Rückrufergebnis in ComponentDidMount auszuführen und dann auszuführen? Das Rückrufergebnis ergibt „componentWillMount

“.
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

Antworte allen (1)
漂亮男人

简化问题为:假设两个异步动作 A 和 B 触发顺序已知,那么 A 和 B 中同样延时的setTimeout是否能保证顺序?

答案显然是不能的。例如当 A 和 B 之间只有微秒级延时时,两个设定了巨大延时的setTimeout就不能保证按照调用setTimeout时的先后顺序触发。

不能够依赖这种脆弱的时序关系来保证代码的执行顺序。在 Code Review 中如果遇到利用这种关系来实现数据初始化、异步请求等功能的代码,答主肯定是会提出意见的。对于异步的控制流,可以采用 Promise / yield 等方式来保证执行顺序,在这里就不赘述了。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!