componentWillMount(){
setTimeout(()=>{
alert(1);
},100)
}
componentDidMount(){
setTimeout(()=>{
alert(2);
},100)
}
Les deux fonctions de cycle de vie du composant ont des opérations asynchrones. L'ordre d'exécution est-il strictement conforme à l'ordre du cycle de déclaration, c'est-à-dire d'abord 1 puis 2 ? Ou n'êtes-vous pas sûr que l'ordre d'exécution soit basé sur le ordre d'insertion dans la file d'attente des messages ? Le problème peut être compris comme en supposant que le temps de retour du résultat asynchrone de ComponentWillMount est très long et que le temps de retour du résultat asynchrone de ComponentDidMount est très court. Est-il possible d'exécuter d'abord le résultat de rappel dans ComponentDidMount, puis de l'exécuter. le résultat du rappel dans composantWillMount
La question simplifiée est : en supposant que l'ordre de déclenchement de deux actions asynchrones A et B soit connu, l'ordre des mêmes délais dans A et B peut-il être garanti ?
La réponse est évidemment non. Par exemple, lorsqu'il n'y a qu'un délai d'une microseconde entre A et B, il ne peut pas être garanti que deuxsetTimeout
avec des retards énormes soient déclenchés dans l'ordre dans lequel
setTimeout
就不能保证按照调用setTimeout
est appelé.Vous ne pouvez pas compter sur cette relation temporelle fragile pour assurer l'ordre d'exécution du code. Dans Code Review, si vous rencontrez du code qui utilise cette relation pour implémenter des fonctions telles que l'initialisation des données et les requêtes asynchrones, le répondant donnera certainement son avis. Pour le flux de contrôle asynchrone, Promise/rendement et d'autres méthodes peuvent être utilisées pour garantir l'ordre d'exécution, qui ne sera pas décrit ici.