如何将chrome.storage.sync.get转换为browser.storage.sync.get?(或者,如何



我正在尝试移植扩展,但我的JS非常生锈。 https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Chrome_incompatibilities 说,等效的WebExtensions API使用承诺代替:

源语言:

    var read = function(name, deflt) {
            return new Promise(function(resolve){
                    chrome.storage.sync.get([name], function(result){
                            if (chrome.runtime.lastError)
                                    throw new Error(chrome.runtime.lastError);
                            resolve(result[name] || deflt);
                    }); 
            });
    };

我觉得应该有一个非常简单和不错的解决方案,因为代码应该返回一个承诺,browser.storage.sync.get也恰好已经返回了一个承诺......我只是不知道怎么做。

由于browser.storage.sync.get返回一个承诺(并假设签名与chrome版本相同(,因此类似的东西应该是等效的。这会立即返回一个 Promise,您可以调用 then()catch() 分别处理成功和错误情况

var read = function(name, deflt) {
  return browser.storage.sync.get([name])
    .then(result => {
      if (browser.runtime.lastError) { // assuming this exists
        throw new Error(browser.runtime.lastError);
      }
      return result[name] || deflt
    })          
};
read('foo', 'barDefault')
  .then(doStuffWithResult)
  .catch(console.error)

最新更新