![](/img/trans.png)
[英]React Native - componentWillReceiveProps to AsyncStorage
[英]Promises in AsyncStorage from React Native
從React Native中繞過AsyncStorage的一個lttle包裝器,我對getAllKeys函數有一點問題。
如果我想要回溯所有的價值觀,這個剪切有什么問題?
getAll: function(){
var items = ["hh"];
AsyncStorage.getAllKeys()
.then( ks => {
ks.forEach( k => {
AsyncStorage.getItem(k)
.then( v => items.push(v)); //console.log(k, v));
});
});
return items;
},
非常感謝
你是同步返回items
,但是.getAllKeys
和.getItems
返回Promises,所以極有可能是異步的
使用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);
})
})),
你需要 :
AsyncStorage getItem(k)
返回的AsyncStorage getItem(k)
的數組, Parse.Promise.when()
(或Promise.all()
)來聚合promises數組, getAll()
返回一個promise。 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));
});
},
如果“hh”僅用於調試目的,則簡化為:
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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.