账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    javascript async/await 使用中遇到的问题
    31
    0

    项目中有一个数据是二层嵌套数组,数据类型类似这样

    questions: [
        {
            type: 'INPUT', 
            answer: 'helloworld'
        },
        {
            type: 'SELECT',
            answer: '1'
        },
        {
            type: 'GROUP', 
            sub_questions: [
            {
                type: 'INPUT', 
                answer: 'hihi'
            },
            {
                type: 'SELECT', 
                answer: '2'
            }
        ]}
        ]
    

    然后我要通过重组数据将这些数据展示出来,但是select显示的值并不是answer,而是将answer传到后端然后拿到的一个结果。

    let answer_arr = [];
    questions.forEach(async (question) => {
        let single_answer = {type: question.type};
        if (question.type === 'INPUT') {
            single_answer.answer = question.answer;
        } else if (question.type === 'SELECT') {
            await axios.post('xxxx', {code: question.code}).then(res => {single_answer.answer = res.data.data})
        } else if (question.type === 'GROUP') {
            single_answer.answer = [];
            question.sub_questions.forEach(async (sub_question) => {
                let single_sub_answer = {type: sub_question.type};
                if (sub_question.type === 'INPUT') {
                    single_sub_answer.answer = question.answer;
                } else if (sub_question.type === 'SELECT') {
                    await axios.post('xxxx', {code: sub_question.code}).then(res => {single_sub_answer.answer = res.data.data})
                single_answer.answer.push(single_sub_answer )
            })
        }
        answer_arr.push(single_answer)
    })

    期望得到的结果就是

    answer_arr = [
        {
            type: 'INPUT',
            answer: 'helloworld'
        },
        { 
            type: 'SELECT',
            answer: 1对应的值
        },
        {
            type: 'GROUP',
            answer: [
                {
                    type: 'INPUT',
                    answer: 'hihi'
                },
                { 
                    type: 'SELECT',
                    answer: 2对应的值
                },
            ]
        }
    ]

    但是执行后发现await并没有生效,answer_arr 中 type为SELECT时,并没有answer。。。
    是不是async/await用法不对。。。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 年华消逝淡忘 普通会员 1楼

      在JavaScript中,async/await是改进async/await的语法和用法的一种方法。在async函数中使用await,可以更清晰地表达代码的执行流程,并可以避免回调地狱。

      然而,使用async/await时,也可能会遇到一些问题。以下是一些常见的问题:

      1. 语法错误:使用async/await可能会导致语法错误。这通常是由于未正确导入async关键字或者在函数体中直接使用await未返回一个Promise的情况。

      2. 代码不清晰:如果async/await没有正确地应用于函数体中,可能会导致代码看起来不清晰。例如,async函数可能是一个复杂的函数,但使用await可能使代码看起来过于复杂。

      3. 无法获取结果:async/await可能会导致无法获取结果。例如,一个async函数可能需要使用await等待某个异步操作完成,但在异步操作完成后,await可能不会等待,这可能会导致程序在等待异步操作完成后结束。

      4. 无法处理错误:async/await可能会导致无法处理错误。例如,一个async函数可能返回一个Promise,但在处理Promise时可能会抛出错误,而async/await可能会将错误处理问题移交给异步操作,这可能会导致程序在错误发生时结束。

      解决这些问题的方法是在使用async/await之前,先确保正确导入async关键字,并且在函数体中正确地使用await。同时,也要注意在处理async/await的错误时,确保将错误处理问题移交给异步操作。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部