TypeError:未定义不是函数{''rv.map ...'}附近

时间:2020-08-20 20:34:37

标签: react-native expo typeerror arrow-functions

我一直在通过Expo通过React native开发一个应用程序,最近建议尝试AsyncStorage以便保存数据。无论如何,我尝试修改get_books函数(好,修改副本),以便可以使用AsyncStorage。通过以下代码,我在调用TypeError: undefined is not a function (near '...rv.map...')时得到一个unnamed_might_delete()(我的描述很清楚)。

代码非常混乱,但要点是:

  • 该函数不能异步,因为它会返回一个无法渲染的承诺
  • (我认为)AsyncStorage需要等待
  • 我在不同位置放置了几条console.log()语句以查看其实际停止运行的位置,并且该函数似乎从未真正运行过

我尝试将行更改为() => unnamed_might_delete(),这可以防止发生错误,但也无法运行该功能。

我意识到错误应该非常容易调试,因为我知道我的“函数”实际上不是一个函数,但是我不知道如何运行该代码。

我可以找到一些解决办法吗?另外,如果需要的话,请询问澄清!

function get_books2(library){
    let rv = [];
    
    const unnamed_might_delete = async () => {
        console.log("Inside unnamed_might_delete");
        try {
            console.log("Awaiting data");
            let datas = await AsyncStorage.getItem(library);
            console.log("Got data");
    
            if (datas !== null){
                console.log("parsing data");
                datas = JSON.parse(datas);
    
                for (let i = 0; i < datas[library].books.length; i++){
                    console.log("adding item "+ i);
                    let temp = {
                        added: datas[library].books[i].added,
                        author: datas[library].books[i].author,
                        read: datas[library].books[i].read,
                        subtitle: datas[library].books[i].subtitle,
                        tags: datas[library].books[i].tags,
                        title: datas[library].books[i].title,
                    }
                    
                    console.log("Pushing temp");
                    rv.push(temp);
                }
            }
    
        }catch (error){
            Alert.alert(error);
        }
    }
    
    console.log("calling unnamed_might_delete");
    unnamed_might_delete();

    console.log("finished unnamed_might_delete");

    if (rv.length != 0){
        return(
            <View>
                {
                    rv.map((l, i) => (
                        <ListItem
                        key={i}
                        title={l.title}
                        subtitle={l.author}
                        bottomDivider
                        chevron
                        onPress={() => 
                            navpush('BookScreen', {
                                title: l.title,
                                subtitle: l.subtitle,
                                author: l.author,
                                tags: l.tags
                            })}
                        />
                    ))
                }
            </View>    
        )
    } else {
        return (
            <View><Text>Nothing to see here!</Text></View>
        )
    }
}

0 个答案:

没有答案