来自React Native的AsyncStorage中的Prom

时间:2016-02-06 23:13:46

标签: android ios promise react-native

从React Native中绕过AsyncStorage的一个lttle包装器,我对getAllKeys函数有点问题。

这个剪切有什么问题,如果我想要反复所有的值?

    auto& location=hashTable.at(hashValue);  // <-- note that auto is a reference
    //...
    location.at(index) = Node;  

非常感谢

2 个答案:

答案 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);
});