Javascript -Uncaught Une promesse a été rejetée même si elle avait déjà été rejetée

J'ai ce travail de code nu de Parse.com, que je cours. Il interroge l'une de mes cours et reçoit les url's, puis je lis ces URL, qui sont des fichiers xml, et j'obtiens des données et je les enregistre pour analyser. Comme on peut le voir dans le code.

Voici le code

Code complet ici gist.github.com/gouegd/aae61aa08b8295d52b08

Quand je cours ce travail de code de nuage. Dans la console. Je vois ce message

Failed with: Uncaught A promise was rejected even though it had already been rejected.

Cela se produit parce que certaines des URL ne sont pas valides, et le code se casse.

Fondamentalement, j'ai besoin d'un moyen de le gérer lorsque l'une des URL ne fonctionne pas et que le code ne s'arrête pas! Et continuez avec les autres URL.

Ce problème se produit entre la ligne 77-83, où la variable url est en train d'être passée, donc j'ai besoin d'ignorer les mauvaises URL et de continuer avec le reste des URL.

D'avance, merci pour votre aide.

C'est un message d'erreur étrange.

Pour autant que je puisse le dire …

Entre les lignes 89 et 90, insérez:

  }, function() { return Parse.Promise.as();//return resolved promise to keep the promise chain going. 

donner :

 return Parse.Cloud.httpRequest({ url: url, //data: ... //some properties of menuItem? }).then(function(httpResponse) { return readResponse_async(httpResponse.text).then(function(res) { if (res.menu.day.at(dayNumber).meal) { return saveMeals_async(res.menu.day.at(dayNumber).meal, school, diningHallNumber, menuLocation); } else { return Parse.Promise.as();//return resolved promise to keep the promise chain going. } }, function() { return Parse.Promise.as();//return resolved promise to keep the promise chain going. }); }); 

Ou peut-être une ligne inférieure:

 return Parse.Cloud.httpRequest({ url: url, //data: ... //some properties of menuItem? }).then(function(httpResponse) { return readResponse_async(httpResponse.text).then(function(res) { if (res.menu.day.at(dayNumber).meal) { return saveMeals_async(res.menu.day.at(dayNumber).meal, school, diningHallNumber, menuLocation); } else { return Parse.Promise.as();//return resolved promise to keep the promise chain going. } }); }, function() { return Parse.Promise.as();//return resolved promise to keep the promise chain going. }); 

MODIFIER

Comme les deux ont échoué à gérer l'erreur, vous pourriez essayer cela, ce qui est désordonné, mais tolérable si, comme je le soupçonne, les promesses de Parse ne sont pas "dangereuses":

 return Parse.Cloud.httpRequest({ url: url, //data: ... //some properties of menuItem? }).then(function(httpResponse) { try { return readResponse_async(httpResponse.text).then(function(res) { if (res.menu.day.at(dayNumber).meal) { return saveMeals_async(res.menu.day.at(dayNumber).meal, school, diningHallNumber, menuLocation); } else { throw new Error(); } }); } catch(e) { return Parse.Promise.as();//return resolved promise to keep the promise chain going. } }, function() { return Parse.Promise.as();//return resolved promise to keep the promise chain going. });