从React Native中绕过AsyncStorage的一个lttle包装器,我对getAllKeys函数有点问题。
这个剪切有什么问题,如果我想要反复所有的值?
auto& location=hashTable.at(hashValue); // <-- note that auto is a reference
//...
location.at(index) = Node;
非常感谢
答案 0 :(得分:2)
您正在同步返回items
,但.getAllKeys
和.getItems
会返回Promise,因此极有可能是异步的
使用Promise.all
等待让所有AsyncStorage.getItem
完成,您的代码可以按如下方式编写
getAll: () =>
Promise.all(AsyncStorage.getAllKeys()
.then(ks =>
ks.map(k =>
AsyncStorage.getItem(k)
)
)
)
,
用法:
.getAll()
.then(items =>
// do something with items
)
.catch(err =>
// handle errors
);
解释注释中的错误 - 如果您在箭头函数中使用{}
,则必须使用return
返回值
getAll: () => Promise.all(AsyncStorage.getAllKeys().then(ks => {
console.log(ks);
// return here
return ks.map(k => {
console.log(k);
// return here
return AsyncStorage.getItem(k);
})
})),
答案 1 :(得分:1)
你需要:
AsyncStorage getItem(k)
,Parse.Promise.when()
(或Promise.all()
)聚合承诺数组,getAll()
返回承诺。getAll: function() {
var items = ["hh"];
return AsyncStorage.getAllKeys().then(ks => {
return Parse.Promise.when(ks.map(k => AsyncStorage.getItem(k))).then(results => items.concat(results));
});
},
如果&#34; hh&#34;仅用于调试目的,简化为:
getAll: function() {
return AsyncStorage.getAllKeys().then(ks => {
return Parse.Promise.when(ks.map(k => AsyncStorage.getItem(k)));
});
},
在任何一种情况下,请致电如下:
foo.getAll().then(function(results) {
// here, `results` is an array of values promised by multiple calls to `AsyncStorage.getItem(k)`
console.log(results);
}, function(error) {
// here, handle whatever error condition that might have arisen
console.log(error);
});