成功登录后,我想用新数据刷新我的 indexeddb 存储。数据刷新完成后,我想重定向到登陆页面。我的问题是我有 1000 多次调用 setItem 并且他们没有完成。
var app = {
Login: function () {
WebService.Login($("#username").val(), $("#password").val())
.then(function () {
// TODO: refresh data and then redirect...
UpdateData().then(function() {
window.location.href = '/Home';
});
})
.catch(function (err) {
console.log("error logging in");
});
},
UpdateData: function () {
return fetch('/api/Customer').then(function (response) {
return response.json();
})
.then(function (data) {
var customerStore = localforage.createInstance({ name: "customers" });
// Refresh data
customerStore.clear().then(function () {
data.forEach(function (c) {
// How do I know when all setItem calls are complete??
customerStore.setItem(String(c.CustomerID), c);
});
});
})
.catch(function (err) {
console.log("Data error", err);
});
}
}
我对 Promise 还比较陌生,但是必须有一种方法可以将所有 setItem 调用放入可以返回的 Promise.all() 中。我怎样才能做到这一点?