(function() {
"use strict";
var storage = chrome.storage.sync;
var localStorage = null;
function getOutsideScope(property) {
if (localStorage.hasOwnProperty(property)) {
return localStorage[property];
}
}
function fulfill(data) {
return data;
}
function rejected(err) {
log(err);
}
window.app.storage = {
get: function(storageKey, storageProp) {
var promise = new Promise(function(fullfill, reject) {
chrome.storage.sync.get(storageKey, function(data) {
if (data.hasOwnProperty(storageKey)) {
fullfill(data[storageKey]);
} else {
reject(new Error(storageKey + " does not exist in the storage values."));
}
});
});
return promise.then(fulfill, rejected);
},
set: function(storageKey, storageItem) {
},
onChanged: function(fn) {
}
};
})();
所以上面是我用于镀铬存储的IIFE封装器,并且返回是哔哔声的痛苦。所以我决定试试Promise
,这是我的第一次,所以不要对我这么粗暴。基本上这就是我想做的事情
var property = app.storage.get("properties");
//property should equal "value"
//except it returns undefined
所以添加承诺它会获得值,除非它返回
Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: "value"}
我做错了Promises我已经尝试过阅读HTML5Rocks,MDN和视频教程,除了它并没有真正提到如何返回一个值。这可以不工作
get:function(storageKey,storageProp) {
chrome.storage.sync.get(storageKey,function(data) {
//for simplicity and no error checking -_-
return data[storageKey];
});
}
答案 0 :(得分:2)
该函数返回它应该返回的内容:一个承诺。要在履行承诺后获得值,您可以通过.then
添加回调:
app.storage.get("properties").then(function(property) {
// property will be "value"
});
来自MDN:
Promise表示创建promise时未必知道的值的代理。它允许您将处理程序与异步操作的最终成功值或失败原因相关联。这允许异步方法返回类似于同步方法的值:异步方法返回一个承诺,即在将来的某个时刻获得一个值,而不是最终值。
[...]
待处理的承诺可以使用值来实现,也可以因某个原因而被拒绝(错误)。当其中任何一个发生时,将调用由promise的then方法排队的关联处理程序。