簡體   English   中英

從滿足條件的存儲中刪除所有對象 - Chrome 擴展 JavaScript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM