javascript async/await 使用中遇到的问题

发布于 2022-09-06 11:02:22 字数 1994 浏览 5 评论 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用法不对。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝色星空 2022-09-13 11:02:22

这句话await一下

await question.sub_questions.forEach(async (sub_question) => {

不过await后面要包装成promise
async只能保证这个函数内是同步不能保证这个函数是同步
建议还是用for循环没那么多麻烦

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文