首页 > 解决方案 > for 循环在异步函数中给出部分输出

问题描述

我得到函数调用的部分输出。谁能告诉我做错了什么

MongoDB中JSON格式的数据库中的数据

MONGODB 中的数据

功能码

async function isTeamNameExists(department, teamID) {
    var store = await new Promise(async (resolve, reject) => {
        //database read function
        db.readCollection(collection_name, (status, data) => {
            if (status) {
                var teamname = new SB.ListofNames();
                teamname.listofboards = data;
                var send = teamname;
    
                console.log("send----->", send);
    
                //checking for teamname exists?
    
                for (var boardindex = 0; boardindex < send.listofboards.length; boardindex++) {
                    var tn = send.listofboards[boardindex];
                    if (tn.department == department && tn.teamId == teamId) {
                        resolve(tn);
                    } else {
                        resolve(null);
                    }
                }
                reject(null);
            }
    
        });
    });
    
    console.log("store---->", store); // the function return value =store
    
    return (store);
    //resolve(store); does not work
    
}

函数调用 1

var output1 = isTeamNameExists(D1,11); 

Result-> {department:D1 , teamId:11} // 存在 -> 返回 teamId=11 的特定 json 数据

函数调用 2

var output2= isTeamNameExists(D2,22);

Result-> null // 它不应该返回 null,但应该返回 {department:D2 , teamId:22}

函数调用 3

var output3= isTeamNameExists(D78b,22000211);

结果-> null // 它应该返回 null。正确的输出

> 所以我得到了部分输出。你能告诉我我做错了什么吗?我是 javascript 新手,每天都在学习一些东西。

标签: javascriptnode.jsmongodbtypescriptasynchronous

解决方案


由于条件,您的函数正在解决for (var boardindex = 0; boardindex < send.listofboards.length; boardindex++)循环中第一次运行完成的那一刻else

您希望循环遍历所有项目,reject如果没有找到条目(您做得正确。)

删除下面的部分,你会很好。

} else {
  resolve(null);

//resolve(store); does not work将不起作用,因为isTeamNameExists功能不是承诺。


推荐阅读