2014-10-31 3 views
2

У меня есть эта работа в облачном коде Parse.com, которую я запускаю. Он запрашивает один из моих классов и получает URL-адрес, затем я читаю эти URL-адреса, которые являются файлами xml, и я получаю некоторые данные от них и сохраняю их для синтаксического анализа. Как видно из кода.Javascript -Uncaught Обещание было отклонено, хотя оно уже было отклонено

Вот код

Полный код здесь gist.github.com/gouegd/aae61aa08b8295d52b08

Когда я запускаю этот код облако работу. В консоли. Я вижу это сообщение

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

Это придумывают, потому что некоторые из ссылки не действительны, а затем разрывы кода.

В принципе, мне нужен способ справиться с этим, когда один из URL-адресов не работает и не имеет кода остановки! И продолжайте с другими URL-адресами.

Эта проблема возникает между строкой 77-83, где передается переменная url, поэтому мне нужно ее игнорировать неправильные URL-адреса, а затем продолжать работу с остальными URL-адресами.

Спасибо за помощь заранее.

+0

Ваше обещание выглядит правильно. –

+0

@BenjaminGruenbaum, вы думаете, проблема может быть где-то еще, я не вижу, как это возможно? – iqueqiorio

+0

Можете ли вы показать нам saveMeals_async? –

ответ

1

Это странное сообщение об ошибке.

Насколько я могу сказать ...

между линиями 89 и 90 вставки:

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

дать:

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. 
    }); 
}); 

или, может быть, одна линия ниже:

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. 
}); 

EDIT

Как и тех, которые не удалось обработать ошибку, вы можете попробовать это, что грязно, но терпимо, если, как я подозреваю, обещания PARSE являются не «бросить безопасный»:

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. 
}); 
+0

Я разместил код с вашим править здесь, чтобы убедиться, что я правильно понял. https://gist.github.com/spennyf/5fa387ebd3e8aa6d11fc. Но это все еще давало ошибку. – iqueqiorio

+0

Я могу быть линейкой. Попробуйте удалить эти две строки и повторно вставить между строками 90 и 91. Это должно обрабатывать ошибку 'Parse.Cloud.httpRequest()'. Если это все еще не работает, вы должны быть подозрительными, что 'Parse.Cloud.httpRequest()' успешно и ошибка выбрана из обработчика успеха. –

+0

Не могли бы вы добавить его? У меня проблемы с тем, где вы хотите, чтобы я добавил его. – iqueqiorio