如何将chrome.storage.sync.get转换为browser.storage.sync.get? (或如何使用Promises)

时间:2019-05-31 05:05:48

标签: javascript

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

原文:

var date = new Date(unix_timestamp*1000);

var hours = date.getHours();

var minutes = "0" + date.getMinutes();

var seconds = "0" + date.getSeconds();

var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);

我觉得应该有一个非常简单而不错的解决方案,因为代码应该返回一个承诺,而 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); }); }); }; 也恰好已经返回了一个承诺...我只是不知道如何。

1 个答案:

答案 0 :(得分:2)

由于browser.storage.sync.get返回一个Promise(并且假定签名与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)