• NodeJS,Node-MySQL, Как вернуть значения из коллбэка в внешнюю функцию?

    WoLF_MaN
    @WoLF_MaN Автор вопроса
    NodeJS, JS developer
    Выход был найден с помощью промисов(Promise)
    Я обьединил две функции в одну в данном случае и воспользовался nodejs-q

    С помощью функции spread дождался всех результатов def.promise и вызвал коллбэк функции в нужном месте.
    getUserProjects:function(id,callback){
            var self = this,
                mysql = self.mysql,
                db = self.db,
                qr = "SELECT id, project_name, elem_markids FROM projects WHERE user_id = ? and showstatus = 0",
                arr = [id];
            var def = Q.defer();
            db.query(qr,arr,function(err, result){
                var res = [];
                if(err){
                    console.log("Can't make request: " + err);
                    if(callback) {
                        callback("query_error", undefined); //Сразу смотреть в логи.
                    }
                }
    
                for(var i = 0; result.length > i;i++){
                    var rs = result[i];
                    var qr = "SELECT id, project_id ,sheet_name,label,current FROM sheets WHERE project_id = ? and showstatus = 0",
                        arr = [rs.id];
                    db.query(qr,arr,function(err, result){
                        if(err){
                            console.log("Can't make request: " + err);
                        }
                        def.resolve([rs,result]);
                    });
                    res.push(def.promise);
                }
                Q.all(res).spread(function(){
                    var res = [];
                    for(var key in arguments){
                        var prom = arguments[key];
                        var proj = prom[0],sheets = prom[1];
                        proj.sheets = sheets;
                        res.push(proj);
                    }
                    callback(null,res);
                });
    
            });
        },
    Ответ написан
    Комментировать