comment utiliser q.js promet de travailler avec plusieurs opérations asynchrones

Remarque: Cette question est aussi de la croix-posté dans Q. js liste de diffusion de plus de ici.


j'ai eu une situation avec plusieurs opérations asynchrones et la réponse que j'ai accepté a souligné que l'aide de Promesses à l'aide d'une bibliothèque, tel que q.js serait plus bénéfique.

Je suis convaincu de revoir mon code pour utiliser des Promesses, mais parce que le code est assez long, j'ai coupé la pertinence des portions et exportés sur les éléments essentiels dans un autre repo.

Les pensions de titres sont ici et le fichier le plus important est cette.

L'exigence est que je veux pageSizes non vide, après avoir traversé tous les traîné'n fichiers perdus.

Le problème est que le FileAPI des opérations à l'intérieur getSizeSettingsFromPage fonction provoque getSizeSettingsFromPage être asynchrone.

Donc je ne peut pas placer checkWhenReady(); comme ça.

function traverseFiles() {
  for (var i=0, l=pages.length; i<l; i++) {
    getSizeSettingsFromPage(pages[i], calculateRatio);   
  }
  checkWhenReady(); //this always returns 0.
}

Cela fonctionne, mais ce n'est pas l'idéal. Je préfère l'appeler checkWhenReady juste une FOIS, après toutes les pages ont subi cette fonction calculateRatio avec succès.

function calculateRatio(width, height, filename) {
  //.... code 
  pageSizes.add(filename, object);
  checkWhenReady(); //this works but it is not ideal. I prefer to call this method AFTER all the `pages` have undergone calculateRatio
  //..... more code...
}

Comment puis-je refactoriser le code à utiliser des Promesses dans Q. js?

InformationsquelleAutor Kim Stacks | 2012-11-28