nodejs-tw / ama

Ask me anything!
MIT License
31 stars 1 forks source link

NodeJS 無法結束 #36

Open Chen-Michael opened 4 years ago

Chen-Michael commented 4 years ago
db.collection('rooms').get().then(rooms => {
    var roomID = [];

    rooms.forEach(room => {
        roomID.push(room.id);
    });

    return roomID;
}).then(async roomID => {
    for (let id of roomID) {
        let users = await db.collection('/room_users/' + id + '/list').get();
        for (let user of users.docs) {
            try {
                let userData = await admin.auth().getUser(user.id);
            } catch (error) {
                console.log(error);
            }
        }
    }
}).then(() => {
    console.log('done.');
});

第二個版本

async function foo() {
    let rooms = await db.collection('rooms').get();
    for (let room of rooms.docs) {
        let users = await db.collection('/room_users/' + room.id + '/list').get();
        for (let user of users.docs) {
            try {
                let userData = await admin.auth().getUser(user.id);
                console.log(userData.uid);
            } catch (error) {
                console.log(error);
            }
        }
    }
    console.log('Done.');
}

console.log('Start.');
foo();

遇到的問題

let userData = await admin.auth().getUser(user.id);

有這一行 NodeJS 無法結束, 已確定沒有其他 error , 也有輸出 done.

但就是結束不了

嘗試過的解法

將 let userData = await admin.auth().getUser(user.id); 移除

輸出 done. 後能順利結束

a0000778 commented 4 years ago

你需要補上 admin 這個變數及其下方法的程式碼

方法名稱看起來有建立資料庫連線之類的行為,很可能是用完沒關閉,或者建立時沒 .unref()