Chrome Storage API的get与set函数疑问:未设置v2为何返回s1?
首先得说,你遇到的情况确实不符合Chrome原生chrome.storage API的正常行为——按道理,你没设置过v2,调用get('v2')时回调里的result.v2应该是undefined,而不是s1。咱们一步步排查可能的原因:
先检查代码笔误:
你有没有可能在第二个get的回调里不小心写成了result.v1?比如:storage.get('v2',function(result){ console.log(v2, result.v1); // 这里写成v1的话,就会输出l2 s1 });如果是这个问题,修正成
result.v2就好了。另外也确认下storage.set的参数是不是真的只有{v1:'s1'},有没有手滑把v2也加进去了。检查Chrome存储的持久化数据:
Chrome的localStorage或syncStorage是持久化的,如果你之前测试时不小心设置过v2:s1,这个值会一直存在,直到你主动删除。你可以打开Chrome开发者工具,切换到Application面板,找到Storage下的Local Storage(或Sync Storage,取决于你用的是chrome.storage.local还是sync),看看里面有没有v2这个键。如果有,删掉它再重新跑代码试试。确认你用的是原生Chrome Storage API:
如果你是自己封装了一个叫storage的对象,那可能封装逻辑有bug——比如当请求的键不存在时,错误地返回了最后一次设置的值。这种情况下,你需要检查封装的get方法逻辑,看看是不是哪里处理错了。
另外顺便提个小细节:你代码里的storage.set({v1:'s1'}),这里的v1是字符串键名,不是变量v1的值l1。如果想把变量的值作为键名,得用ES6的计算属性名:storage.set({[v1]:'s1'}),不过这和你当前的问题无关,只是个小提醒。
内容的提问来源于stack exchange,提问作者Farhan

