您如何瞭解For循環何時完成迭代並附加回調。
For循環的Javascript結束鏈回調
這是一個函數內許多循環的示例循環,它將記錄插入indexedDB。
if (Object.hasOwnProperty("Books")) {
for (var i = 0, j = Object["Books"].length; i < j; i++) {
server.Book.add({
title: Object["Books"][i].Cat,
content: Object["Books"][i]
});
}
}
我需要能夠知道每個if語句循環何時完成,然後附加一個回調。所有循環都是異步觸發的,我只需要在所有循環完成時運行一個function_final()
而不是在它們被觸發時。
編輯
我迄今爲止嘗試:
InsertDB = {
addBook: function(Object) {
return $.Deferred(function() {
var self = this;
setTimeout(function() {
if (Object.hasOwnProperty("Book")) {
for (var i = 0, j = Object["Book"].length; i < j; i++) {
server.Book.add({
title: Object["Book"][i].id,
content: Object["Book"][i]
});
}
self.resolve();
}
}, 200);
});
},
addMagaz: function(Object) {
return $.Deferred(function() {
var self = this;
setTimeout(function() {
if (Object.hasOwnProperty("Magaz")) {
for (var i = 0, j = Object["Magaz"].length; i < j; i++) {
server.Magaz.add({
content: Object["Magaz"][i]
});
}
self.resolve();
}
}, 2000);
});
},
addHgh: function(Object) {
return $.Deferred(function() {
var self = this;
setTimeout(function() {
if (Object.hasOwnProperty("MYTVhighlights")) {
for (var i = 0, j = Object["MYTVhighlights"].length; i < j; i++) {
server.MYTVhighlights.add({
content: Object["MYTVhighlights"][i]
});
}
self.resolve();
}
}, 200);
});
}, ect...
然後在AJAX成功回調:
success: function(data){
var Object = $.parseJSON(data);
$.when(InsertDB.addBook(Object),
InsertDB.addMagaz(Object),
InsertDB.addUser(Object),
InsertDB.addArticles(Object),
InsertDB.addHgh(Object),
InsertDB.addSomeC(Object),
InsertDB.addOtherC(Object)).done(final_func);
function final_func() {
window.location = 'page.html';
}
這裏final_func是循環結束前解僱..
感謝
server.Book.add是否返回承諾? – djna
我認爲這正是js承諾的一項任務。爲您的循環創建承諾。解決一次循環完成。在什麼時候換行承諾。然後附加單個回調。 – Olga
是的。它是一個名爲DB.js的IndexedDB插件,您可以附加.done()。請參閱更新後的帖子,添加了我曾嘗試過的 – Awena