所以我有另一个传递res
的函数的数组,这是一个如下所示的列表:
[ RowDataPacket { UserID: 26 }, RowDataPacker { UserID: 4 } ]
它存储用户ID,我想要的是一个找到用户id的用户名的函数,并将它们存储在另一个数组中。这就是我所拥有的:
function getThem(res, params) {
var promises = res.map(function (item) { // return array of promises
// return the promise:
for (i = 0; i < Object.keys(res).length; i++) {
console.log("user: ", res[i].UserId);
getUsernameFromId(res[users.length].UserId).then(function() {
console.log("username: ", res[0].username);
users.push(res[0].username);
});
}
}, function (err) {
console.error(err);
});
Promise.all(promises).then(function () {
console.log("users: ", users);
//do something with the finalized list of albums here
});
}
控制台输出:
用户:26
用户:4
用户:26
用户:4
用户:[]
用户名:undefined
用户名:undefined
用户名:undefined
用户名:undefined
那我怎么能等待for循环完成mysql调用呢?也许有另一种方法可以做到这一点?
编辑:不介意未定义的用户名,以后很容易修复。告诉我如何在数组中包含那些未定义的
答案 0 :(得分:2)
假设(必须假设,因为您的代码似乎使用res
就像一个具有您需要的所有内容的majick对象,而对它做任何事情)实际的res
看起来像
[ { UserID: 26 }, { UserID: 4 } ]
和getUsernameFromId
返回一个具有username
属性的对象,例如
{ username: 'blah', ...otherproperties }
getThem
可以简单地
function getThem(res, params) {
return Promise.all(res.map(({UserID}) => getUsernameFromId(UserId).then(({username}) => username)))
.then(users => {
console.log("users: ", users);
//do something with the finalized list of albums here
});
}
或在#34;旧学校&#34;的JavaScript
function getThem(res, params) {
return Promise.all(res.map(function (_ref) {
var UserID = _ref.UserID;
return getUsernameFromId(UserId).then(function (_ref2) {
var username = _ref2.username;
return username;
});
})).then(function (users) {
console.log("users: ", users);
//do something with the finalized list of albums here
});
}