簡體   English   中英

檢查for mysql調用內部的循環是否完成了nodejs

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM