JavaScript 忽略将对象添加到数组
JavaScript ignoring adding object to array
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 方法时,它会忽略该命令。
我究竟做错了什么?
提前致谢。
所有这些都应该用 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);
}
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 方法时,它会忽略该命令。 我究竟做错了什么? 提前致谢。
所有这些都应该用 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);
}