2014-12-09 5 views
0

Недавно я начал работать на ионной каркасной основе с использованием углового JS. Вот моя проблема: $http.post

Мое требование: мне нужно загрузить фотографии на свой сервер. Пользователь выбрал группу фотографий (скажем, 15) и начинает загрузку на сервер. Вот мой код для загрузки на сервер

foreach(photo in photoList){ 
    $http.post(url,photo).then(success(){},error(){}) 
} 

Теперь моя проблема из 15 загружается всего 6-7 фотографий. Для оставшихся фотографий звонки не вызываются даже звонки $http.post(). Я слышал, что могут быть проблемы с $http. Это верно? Если да, то как решить эту проблему?

+0

Возможно, вам нужно связать HTTP-сообщения, когда один закончен, запустите еще один –

+0

, как насчет реализации небольшой очереди, которая ограничивает обработку 4 или 5 звонков, которые будут обрабатываться? или в 'success()' начать другой вызов – svarog

+0

@Avraam. Это то, что я должен делать, если ничего не получится. выполняя один за другим, последний вариант для меня. –

ответ

0

Вы столкнулись с лимитом параллелизма, встроенным во все веб-браузеры по соглашению. Браузеры не будут создавать более определенного небольшого числа, обычно 6 (details here) одновременных подключений к тому же самому хосту. Вы не можете обойти это в javascript или с любой технологией, доступной для веб-приложения. Это по уважительной причине, поскольку в какой-то момент параллелизм фактически приводит к снижению общей производительности по мере того, как сеть насыщается или другие ограничения ресурсов начинают ударяться. Вы должны работать в этом пределе. Браузер автоматически ставит очередь ваших запросов в пределах параллельного порога, поэтому вам не нужно добавлять какой-либо специальный код. Однако вы можете, если вы так решите навязать свой собственный предел параллелизма в коде, если хотите предоставить более точный прогресс конечному пользователю.

+0

Спасибо за ваш ответ. Вы упомянули: «Браузер автоматически ставит очередь ваших запросов в пределах параллельного порога, поэтому вам не нужно добавлять какой-либо специальный код» - Но я этого не вижу. На самом деле я работаю над приложением PhoneGap, которое работает в браузере. Я запускаю 15 $ http.post(), сидящий в цикле. Но только 6 из 15 возвращаются. Отдых никогда не возвращается. Если браузер автоматически находится в очереди, то rest должен быть выполнен после завершения начального 6. Но этого не происходит. –

+0

Возможно, это может быть неверно о запросах AJAX или запросах ajax без GET. Вам придется немного поэкспериментировать. Я знаю, что это определенно верно для других ресурсов, таких как изображения. Я не знаю точных правил и ограничений для вашего конкретного случая использования. Сообщите нам, если вы выясните детали, или кто-то другой опубликует ответ. –

Смежные вопросы