[英]Remove all objects from storage meeting a condition - Chrome extension JavaScript
我想寫一個 function 返回一個 Promise 在從存儲中刪除所有具有特定值的屬性的對象后解析,但要做到這一點我需要在循環中調用 remove ,這是異步的,所以我不知道刪除所有內容后如何安全解決。
以下是刪除一個 object 后我可以解決的方法:
function remove(value) {
return new Promise(function(resolve, reject) {
// Get all objects from storage
chrome.storage.local.get(null, function(allStorage) {
// Loop through keys
for(let key in allStorage) {
// Remove if the property === value
if(allStorage[key].property === value) {
chrome.storage.local.remove(key, function() {
// Done removing one object
resolve();
});
}
}
});
});
}
但我想刪除所有這些:
function removeAll(value) {
return new Promise(function(resolve, reject) {
// Get all objects from storage
chrome.storage.local.get(null, function(allStorage) {
// Loop through keys
for(let key in allStorage) {
// Remove if the property === value
if(allStorage[key].property === value) {
chrome.storage.local.remove(key, function() {
// Done removing one object
});
}
}
// How can I safely resolve here, when all objects are removed?
resolve();
});
});
}
在了解了有關承諾的更多信息后,我最終這樣做了。 我覺得一定有辦法讓它更干凈。
function removeAll(value) {
return new Promise(resolve => {
let promises = [];
// Get all objects from storage
chrome.storage.local.get(null, allStorage => {
// Loop through keys
for(let key in allStorage) {
// Remove if the property === value
if(allStorage[key].property === value) {
// Create a new promise that resolves when object is removed
let promise = new Promise(resolve => {
chrome.storage.local.remove(key, _ => {
console.log('deleted object from storage');
resolve();
});
});
// Push to array of promises
promises.push(promise);
}
}
// Resolve the function return promise when all promises in array resolve
Promise.all(promises).then(_ => {
resolve();
});
});
});
}
哦,顯然 remove 接受一個數組。
function removeAll(value) {
return new Promise(resolve => {
// Get all storage
chrome.storage.local.get(null, allStorage => {
let keysToRemove = [];
// Loop through all keys
for(let key in allStorage) {
// Get the object associated with key
let object = allStorage[key];
// Push to remove array if value matches argument
if(object.property === value) {
keysToRemove.push(key);
}
}
chrome.storage.local.remove(keysToRemove, _ => {
resolve();
});
});
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.