Objet Web en série
Posted: 17 Dec 2014, 07:43
Bonjour,
bon ce n'est pas vraiment un bug mais il y a 2 petits soucis avec l'objet Web.
(Je précise que j'utilise uniquement le code)
Le premier déjà : Quand Actiona n'a plus d'action à effectuer dans sa pile, le script s’arrête donc les fonctions de callback n'arrivent jamais si on ne laisse pas tourner une boucle dans le vide ou n'importe quoi histoire que la pile ne soit pas vide.
On se retrouve donc à écrire des while (data.isDownloading() === true) {} pour pas que le script s’arrête.
Le deuxième : Voila un code en exemple qui au passage, ruine l'asynchrone de la fonction. La boucle while, outre de résoudre le pb numéro 1, résout un autre problème ici. Ce problème c'est la variable i. Voilà ce qu'il se passe :
Tour de boucle :
[*]Un objet Web est initialisé
[*]download est appellé
[*]Attente que le téléchargement soit fini
[*]Des que téléchargement fini, onFinished est appelé il se sert du compteur de la boucle pour savoir quel est le bon objet dans le tableau
Et cela x nombre de fois
Si on met le while à l'extérieur du for, le téléchargement se sérialise et devient asynchrone, cool. Le seul soucis est que dans ce cas i n'est plus utilisable car on sort de la boucle, donc on ne peux plus retrouver l'objet dans le tableau. Bon je ne sais pas si c'est très clair, c'est pas facile à expliquer... On peux en les ajoutant avec push mais on perd l'ordre de l'index. Par exemple un tableau numéro 1 contient les url dans un certains ordre, il faut que l'ordre de l'index corresponde avec le tableau 2 contenant les objets téléchargés .
Il faudrait pouvoir définir un paramètre aux fonctions de callback, au moins onFinished et onDownloadProgress ou sinon qu'elles retournent en paramètre l'objet qui les a appelé.
Je sais pas si ce que je dit est compréhensible xx
bon ce n'est pas vraiment un bug mais il y a 2 petits soucis avec l'objet Web.
(Je précise que j'utilise uniquement le code)
Le premier déjà : Quand Actiona n'a plus d'action à effectuer dans sa pile, le script s’arrête donc les fonctions de callback n'arrivent jamais si on ne laisse pas tourner une boucle dans le vide ou n'importe quoi histoire que la pile ne soit pas vide.
On se retrouve donc à écrire des while (data.isDownloading() === true) {} pour pas que le script s’arrête.
Le deuxième : Voila un code en exemple qui au passage, ruine l'asynchrone de la fonction. La boucle while, outre de résoudre le pb numéro 1, résout un autre problème ici. Ce problème c'est la variable i. Voilà ce qu'il se passe :
Tour de boucle :
[*]Un objet Web est initialisé
[*]download est appellé
[*]Attente que le téléchargement soit fini
[*]Des que téléchargement fini, onFinished est appelé il se sert du compteur de la boucle pour savoir quel est le bon objet dans le tableau
Et cela x nombre de fois
Code: Select all
for (var i = 0; i < url.length; i++) {
data[i] = new Web({
onFinished : function() {
image[i] = data[i].toImage();
},
onError : function(error) {
erreur[url[i]] = error;
}
});
data[i].download(url[i]);
while (data[i].isDownloading() === true) {}
}
Il faudrait pouvoir définir un paramètre aux fonctions de callback, au moins onFinished et onDownloadProgress ou sinon qu'elles retournent en paramètre l'objet qui les a appelé.
Code: Select all
onFinished : function(i) {
tab2[i] = tab1[i].toImage();
}