我正在尝试移植扩展,但我的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)