吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2385|回复: 9
收起左侧

[求助] 求JS大神帮看看代码

[复制链接]
candyl6 发表于 2021-3-16 19:42
50吾爱币
[JavaScript] 纯文本查看 复制代码
import dept from './dt.js'
import pat from './pt.js'

async function getSelectDt(uid) {
        const deptArr = await dept.getDept(uid);  //获取原始json数组
        let fiArr = deptArr.filter(item => item.Dept_Type == '1');  //过滤一遍生成新的数组
        let tmp = [];
        fiArr.map(async n => {
                let m = await pat.getPat(n.Dept_Code)  //getPat返回的是一个Promise
                let j = {
                        "Dept_Code": n.Dept_Code,
                        "Dept_Type": n.Dept_Type,
                        "DEPT_NAME": n.DEPT_NAME,
                        "User_Id": n.User_Id,
                        "Item": m
                }
                tmp.push(j);
                console.log(tmp)  //单次循环生成的新的数组是我想要的
        });
        console.log(tmp) //这里结果确实空的
}

export {
        getSelectDt
}


求大神帮忙看看,第18行的位置单次循环确实输出了我想要的结果,但是我怎么把最终的tmp数组给返回来呢,第20行输出的结果始终是空的,而且第20行的代码总是优先于第18行运行的
我尝试在第8行加上await ,但始终还是第20行先运行,求大神指导,跪谢


最佳答案

查看完整内容

js map,forEach等都是同步的 可以参考 https://blog.csdn.net/weixin_41602509/article/details/103494265 其实使用最简单的for循环就行

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

一条鱼尾 发表于 2021-3-16 19:42
js map,forEach等都是同步的
可以参考 https://blog.csdn.net/weixin_41602509/article/details/103494265
其实使用最简单的for循环就行
 楼主| candyl6 发表于 2021-3-16 20:01
fanvalen 发表于 2021-3-16 20:06
虽然我怎么懂js 但是我看第八行有个=>这是判断吗
如果判断失败肯定直接运行下一句了
独木君 发表于 2021-3-16 20:08
已经移动了
 楼主| candyl6 发表于 2021-3-16 20:47
fanvalen 发表于 2021-3-16 20:06
虽然我怎么懂js 但是我看第八行有个=>这是判断吗
如果判断失败肯定直接运行下一句了

这是map使用的参数,是一个函数,第18行是有输出的,证明里面是运行了的
咿呀哇 发表于 2021-3-16 20:48
import dept from './dt.js'
import pat from './pt.js'

async function getSelectDt(uid) {
        const deptArr = await dept.getDept(uid);  //获取原始json数组
        let fiArr = deptArr.filter(item => item.Dept_Type == '1');  //过滤一遍生成新的数组
        let tmp = [];
        await Promise.all(fiArr.map(async n => {
                let m = await pat.getPat(n.Dept_Code)  //getPat返回的是一个Promise
                let j = {
                        "Dept_Code": n.Dept_Code,
                        "Dept_Type": n.Dept_Type,
                        "DEPT_NAME": n.DEPT_NAME,
                        "User_Id": n.User_Id,
                        "Item": m
                }
                tmp.push(j);
                console.log(tmp)  //单次循环生成的新的数组是我想要的
        }));
        console.log(tmp) //这里结果确实空的
}

export {
        getSelectDt
}
52pojie11023995 发表于 2021-3-16 22:10
我说说我的思路吧:
在循环之前声明一个变量,变量指定一个值。
在第18行,判断这个变量是否为之前自己指定的值,如果是,就用这个变量记录你要的结果(这样可以保证是第一次循环的结果,而不是其他次的。),运行完20行后再返回就行了。
yuenc 发表于 2021-3-16 22:30
map后的返回值 await promise.all 一下

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
candyl6 + 3 + 1 谢谢@Thanks!

查看全部评分

轩云呀 发表于 2021-3-17 10:16
本帖最后由 轩云呀 于 2021-3-17 10:18 编辑

import dept from './dt.js'
import pat from './pt.js'

async function getSelectDt(uid) {
        const deptArr = await dept.getDept(uid);  //获取原始json数组
        let fiArr = deptArr.filter(item => item.Dept_Type == '1');  //过滤一遍生成新的数组
        let tmp = [];
        await fiArr.map(async n => {
                let m = await pat.getPat(n.Dept_Code)  //getPat返回的是一个Promise
                let j = {
                        "Dept_Code": n.Dept_Code,
                        "Dept_Type": n.Dept_Type,
                        "DEPT_NAME": n.DEPT_NAME,
                        "User_Id": n.User_Id,
                        "Item": m
                }
                tmp.push(j);
                console.log(tmp)  //单次循环生成的新的数组是我想要的
        });
        console.log(tmp) //这里结果确实空的
}

export {
        getSelectDt
}


第八行也加个await
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 05:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表