У меня есть список объектов видео, у каждого объекта есть ссылка и несколько других атрибутов. Я построил цикл, который проходит через этот список и загружает эти видео по их ссылкам, служба, которую я использую в настоящее время, не поддерживает одновременную загрузку нескольких видеороликов, мне нужно подождать 1-го видео для загрузки после этого. нужен 2-й, чтобы загрузить ..etc
Вот код отвечает за это:
$scope.upload = function(){
$scope.videoList.forEach(function(video){
video.state = "Downloading"
$scope.msg = "The video is downloading"
$http.post("/download",{link : video.link,title : video.title}).then(function(resp){
$scope.msg = "The video has been downloaded on the server, it will now start uploading"
var filen = resp.data["fn"]
var title = resp.data["title"]
video.state = "Uploading"
$http.get("/uploadVid?file=" + filen +"&title=" + title).then(function(resp){
if (resp.data == "0002"){
alert("You didn't authorize the App yet, please authorize it to be able to use it .")
}
if (resp.data == "000X"){
alert("An error occured, please retry .")
}
else{
$scope.msg = "the video uploaded, here's the link: " + resp.data
video.state = "Done"
video.link = resp.data
}
})
})
}) }
что здесь происходит, что для каждого видео мы загружаем его на сервер после того, как он загружен, он загружен на услугу видеохостинга (в нашем случае - YouTube). Это должно сработать нормально, но из-за асинхронного вызова служебных вызовов $http
все они одновременно загружаются одновременно и uplaod.
Петля не ждет завершения итерации и переходит непосредственно к следующей итерации. Я хочу, чтобы это было синхронно, видео нужно загружать и загружать по одному. Я бы предпочел не использовать интерфейс Promises, я спешу, и я не знаю много о них. Если вы это сделаете, объясните это как можно больше.
Вы * не хотите * делать запросы * синхронно *. Вы * делаете * хотите сделать их * последовательными *. –
Вы уже используете обещания в своем коде, http.post возвращает обещание, и когда это обещание разрешает, оно вызывает вашу функцию. –
@ T.J.Crowder Как сделать их последовательными, и какая разница, не могли бы вы объяснить, пожалуйста? – DeltaWeb