为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 忽略将对象添加到数组

JavaScript 忽略将对象添加到数组

呼啦一阵风 2023-03-03 15:23:53
function setUsersDefinitions(data, userID){    let users = new Array();    return new Promise((resolve)=>{        data.forEach(el => {            if (el.id_adder === userID) {                getUserName(el.id_added).then(u => {                    users.push({                        username: u,                        locked: el.locked !== null,                        canUnlock: el.locked === userID,                        id: el.id_added                    })                }).catch(e=>{                    console.log(e);                })            } else {                getUserName(el.id_adder).then(u=>{                    users.push({                        username: u,                        locked: el.locked !== null,                        canUnlock: el.locked === userID,                        id: el.id_adder                    })                }).catch(e=>{                    console.log(e);                })            }        })        resolve(users);    })}问题是,当我尝试对生成的项目执行 console.log 时,它可以工作,但是当它调用 Array.push 方法时,它会忽略该命令。我究竟做错了什么?提前致谢。
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

所有这些都应该使用 async/await 来完成,而不是将所有内容都包装在一个中Promise——这将极大地简化您的代码:


async function setUsersDefinitions(data, userID){

    let users = new Array();

    for(var i=0;i<data.length;i++){

        var el = data[i];

        var id = (el.id_adder === userID) ? el.id_added : el.id_adder;

        var u = await getUserName(id);

        users.push({

                     username: u,

                     locked: el.locked !== null,

                     canUnlock: el.locked === userID,

                     id: id

                  });

    }

    return users;

}

(注意:为简洁起见省略了错误处理)


然后你应该await在任何地方调用这个函数(它本身必须在一个async函数中):


async function doWork(){

    var users = await setUsersDefinitions(some_data, some_userID);

    console.log(users);

}


查看完整回答
反对 回复 2023-03-03
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信