Так что я возился с $ .Deferred() и не мог заставить его работать так, как я хочу.Выполнение нескольких отложенных групп последовательно
Идея заключается в том, чтобы запустить группу из 10 пунктов, ждать его, чтобы закончить, запустите следующую группу, дождитесь ее завершения и т.д.
Приведенный ниже код этот выход
(3)Item Complete
(30)Item Finished
.
indexedDB.deleteDatabase("_pouch_test")
db = new PouchDB('test');
function item(limit){
var d = $.Deferred();
var promises = []
var url = ""//url that will respond with up to limit responces
$.getJSON(url,function(data){
$.each(data.items,function(i, item){
promises.push(db.post({item:"test"}).then(console.log("Item Finished ")))
})
}).fail(function(jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
});
return $.when.apply($,promises).promise()
}
function group(times){
var d = $.Deferred().resolve()
for(var i=0; i<times; i++){
d.then(item(10).then(function(){console.log("Group Complete")}))
}
return d.promise()
}
function init(){
group(3).then("All Complete")
}
Что я ожидаю выводится как
(10)Item Finished
Group Complete
(10)Item Finished
Group Complete
(10)Item Finished
Group Complete
All Complete
Если кто-то может мне точку в правильном направлении, что было бы здорово. Я думаю, что я делаю $ .when неправильно, но не знаю другого пути.
Еще раз спасибо.
--edit: Оглядываясь назад, я считаю, что массив обещаний пуст, когда ему передают $ .when, все еще теперь уверен, как его исправить.
--edit2: updated code производит выходные данные ниже, но сначала отображается «Все полное»? Это должно быть последним.
All Complete
(10)Item finished
Group Finished
(10)Item finished
Group Finished
(10)Item finished
Group Finished
-edit3: So I solved it. Мне пришлось назначить обновленную отложенную переменную, а также обернуть внутреннюю часть тогда в функции. Я уверен, что код может быть более эффективным, но это отличная отправная точка.
Это действительно сбивает с толку, но я думаю, что вы ищете что-то вроде этого -> https://jsfiddle.net/16s71q12/1/ – adeneo
@adeneo Что-то там меня думать о решении к пустые обещания в $ .when проблема. проверьте edit2. – MTNewton
Вы хотите запускать элементы * в * каждой группе из 10 последовательно или параллельно? Я знаю, что вы хотите, чтобы группы были в последовательности. –