我正在尝试移植扩展,但是我的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);
});
});
};
也恰好已经返回了一个承诺...我只是不知道如何。
答案 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)