簡體   English   中英

來自React Native的AsyncStorage中的Prom

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM