Dans un projet simple de travailleur web HTML5, j'ai défini un travailleur web qui échange des messages en utilisant l'API de messagerie HTML5. Il y a une source de confusion pour moi car nous avons défini deux gestionnaires .onmessage (fonctions de rappel), l'un dans le script principal et l'autre dans le worker.js : index.html :
<!DOCTYPE html>
<html>
<body>
<script>
var worker = new Worker("worker.js");
worker.onmessage = function(event) {
alert("Reply from index.html:"+event.data);
}
worker.postMessage("message 3,");
</script>
</body>
</html>
worker.js :
this.onmessage = function(event) {
postMessage("message 0,"+event.data);
}
postMessage("message 1,");
je ne comprends pas l'ordre d'affichage des messages ! Il affiche d'abord ceci : et affiche ensuite ceci
Mais pourquoi ? Je ne comprends pas comment et quand ces gestionnaires ont été appelés ? d'abord le worker.postMessage("message 3,") ; déclenche le worker.postMessage("message 3,") ; dans worker.js et postMessage("message 0, "+event.data) ; dans returns déclenche le worker. onmessage = function(event) dans le script principal ! puis à la toute fin le postMessage("message 1,") ; du worker.js déclenche le onmessage du script principal (index.html). Pouvons-nous dire que tout appel postMessage sur un worker déclenche la fonction onmessage d'autres web workers ?