Maison  >  Questions et réponses  >  le corps du texte

javascript - ordre d'exécution asynchrone dans chaque cycle de déclaration en réaction

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

黄舟黄舟2634 Il y a quelques jours829

répondre à tous(1)je répondrai

  • 漂亮男人

    漂亮男人2017-07-05 10:58:58

    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 ? setTimeout

    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 deux

    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.

    répondre
    0
  • Annulerrépondre