[英]check if for loop with mysql call inside is finished nodejs
所以我有一個傳遞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
使用者:[]
用戶名:未定義
用戶名:未定義
用戶名:未定義
用戶名:未定義
所以我該如何等待for循環完成mysql調用呢? 也許還有另一種方法?
編輯:不要介意未定義的用戶名,以后很容易修復。 告訴我如何將那些未定義的內容放在數組中
假設(必須假設,因為您的代碼似乎使用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
});
}
或在“舊學校” 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
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.