Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的NodeJs代码正在返回未定义的值_Javascript_Node.js - Fatal编程技术网

Javascript 我的NodeJs代码正在返回未定义的值

Javascript 我的NodeJs代码正在返回未定义的值,javascript,node.js,Javascript,Node.js,这是我写的代码 function getAllTasksToThatProjectType(typeId){ let storeTaskIds = []; let projectTypeTasks = []; let returnVar = new Array(); ProjectType.findOne({ _id: typeId }) .exec((error, projectType) => { // if(error) ret

这是我写的代码

function getAllTasksToThatProjectType(typeId){
    let storeTaskIds = [];
    let projectTypeTasks = [];
    let returnVar = new Array();
    ProjectType.findOne({ _id: typeId })
    .exec((error, projectType) => {
        // if(error) return res.status(400).json({ error })
        if(projectType){
            projectType.tasks.map(tsk => storeTaskIds.push(tsk.taskId))
            ProjectTask.find({ })
            .exec((error, projectTask) => {
                // if(error) return res.status(400).json({ error })
                if(projectTask){
                    storeTaskIds.forEach(function(tID){
                        projectTask.forEach(function(tsk){
                            if(JSON.stringify(tsk._id) == JSON.stringify(tID) || JSON.stringify(tsk.parentId) == JSON.stringify(tID))
                                projectTypeTasks.push(tsk)
                        })
                    })
                    // Here would be the api return statement.
                    return projectTypeTasks;
                }
            })
        }
    })
}



const taskForPType = getAllTasksToThatProjectType(req.body.typeOfProject)
如果我这样调用函数,它会将
taskForPType
的值设置为
undefined

我必须在没有回调函数的情况下执行此操作。关于如何实现它的任何建议。

它返回未定义,因为调用时您的函数尚未完成。您可以像这样异步重写函数:

异步函数getAllTasksToThatProjectType(typeId){ 常量storeTaskIds=[]; const projectTypeTasks=[]; const returnVar=新数组(); 返回新承诺(功能(解决、拒绝){ ProjectType.findOne({u id:typeId}).exec((错误,ProjectType)=>{ 如果(错误){ 拒绝(错误); } if(项目类型){ projectType.tasks.map((tsk)=>storeTaskIds.push(tsk.taskId)); ProjectTask.find({}).exec((错误,ProjectTask)=>{ 如果(错误){ 拒绝(错误) } if(项目任务){ storeTaskIds.forEach(函数(tID){ projectTask.forEach(功能(tsk){ if(JSON.stringify(tsk._id)==JSON.stringify(tID)| | JSON.stringify(tsk.parentId)==JSON.stringify(tID)) projectTypeTasks.push(tsk); }); }); //下面是api返回语句。 返回解析(projectTypeTasks); } }); } }); }); } const taskForPType=等待GetAllTasks转换为该项目类型(项目的req.body.typeOfProject); 有关更多信息,您可以查看有关异步调用的更多信息:

这是否回答了您的问题?“我必须在没有回调函数的情况下完成这项工作”,这可能是不可能的。
.exec
接受回调是有原因的。但是你应该告诉我们更多关于什么是
ProjectType
。这也可能有助于您了解正在处理的总体问题: