【问题标题】:uploading document causes error first time上传文件第一次导致错误
【发布时间】:2020-08-25 05:29:22
【问题描述】:

我遇到此错误,允许用户上传文档,但第一次选择它时会导致错误,但如果用户第二次这样做,则文档上传成功。

顺便说一句,该函数首先将其称为 PickDocument。

我得到的错误是来自 FilePArser 函数的警报

这是我的相关代码:

const [userOut, setUserOut] = useState("")
const pickDocument = async () => {
        console.log('pic Doc')
        try {
            let input = await DocumentPicker.getDocumentAsync({
                type: "text/plain",
            })
            setUserOut(await FileSystem.readAsStringAsync(input.uri))
            createLoans()
        } catch (error) {
            console.log(error);
        }
    }

    const fileParser = () => {
        console.log('file parser')
        const parsedLoans = [];
        var newUserOut = userOut;

        if (newUserOut.length == 0) {
            Alert.alert('wrong document','Try Again')
            return;
        }
        //remove the grants
        var grantPos = newUserOut.search("Grant Type:");
        var pos = newUserOut.search("Loan Type:");
        //hopefully just the loans now
        newUserOut = newUserOut.slice(pos, grantPos)

        while (newUserOut.length > 0) {
            var lastPos = newUserOut.lastIndexOf("Loan Type:");
            parsedLoans.push(newUserOut.slice(lastPos, newUserOut.length));
            newUserOut = newUserOut.slice(0, lastPos);
        }
        //console.log('parsed loans: ' + parsedLoans)
        return parsedLoans;
    };

    const createLoans = () => {
        console.log('create loans')
        const newLoans = fileParser();
        const title= 'Loan Amount:$'
        const interest = 'Loan Interest Rate:'

        for(let i =1; i <= newLoans.length; i++){
            let loan = newLoans[i]
            let goalTitle=loan.substring(loan.indexOf(title)+title.length,loan.indexOf('Loan Disbursed Amount:'))
            //console.log("goalTitle: " + goalTitle)
            let interestRate = loan.substring(loan.indexOf(interest)+interest.length,loan.indexOf('Loan Repayment Plan Type')-1)
            //console.log("Interest rate: "+ interestRate)
            let years = 10
            let paidOff = 50
            setGoalCounter(goalCounter+1)
            let id =i
            addGoalHandler(goalTitle,interestRate,years,paidOff,id)
        }
        return

    };

【问题讨论】:

    标签: javascript react-native async-await


    【解决方案1】:

    问题是你试图使用'useState',就好像它是一个全局变量一样。设置状态不会立即改变状态值,它会设置一个挂起的请求来更新应用程序的状态并尽快重新渲染它。因此不能依赖它来完成下一行的更新,就像一个常规变量一样。有关详细信息,请参阅此问题/答案:Why calling react setState method doesn't mutate the state immediately?

    【讨论】:

    • 我查看了它,但在如何将它应用于 useState 而不是 setState 时遇到了麻烦。你有什么指点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多