/** * Created by Tony on 2017/8/9. */ // let consts = require('../../../modules/main/models/project_consts'); // let projectConst = consts.projectConst; let prjMdl = require('../../../modules/pm/models/project_model'); let projectDataMdl = require('../../../modules/main/models/project'); module.exports = { prepareProjectData: prepareProjectData, prepareMultiProjectData: prepareMultiProjectData }; function prepareProjectData(userId, prjId, filter, callback) { let rawDataObj = null; let basicInformation = prjMdl.project.getBasicInfo(prjId); prjMdl.project.getUserProject(userId, prjId, function(err, msg, rst){ if (!err) { rawDataObj = {}; rawDataObj.prj = rst; projectDataMdl.getFilterData(prjId, filter, function (results) { if (results) { rawDataObj.prjData = results; basicInformation.then(function(basicRst) { if (basicRst !== null && basicRst !== undefined) { let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj; doc.property.basicInformation = basicRst; } callback(false, 'Succeeded!', rawDataObj); }); // callback(false, 'Succeeded!', rawDataObj); } else { callback(true, 'No data were found!', null); } }); } else { callback(err, msg, null); } }); } async function prepareMultiProjectData(userId, prjIds, filter) { function getProjectPageData(prjId, basicRst) { return new Promise(function(resolve, reject) { // console.log('promise prjId: ' + prjId); prjMdl.project.getUserProject(userId, prjId, function(err, msg, rst){ if (!err) { projectDataMdl.getFilterData(prjId, filter, function (results) { if (results) { rawDataObj = {}; rawDataObj.prj = rst; // console.log(results); rawDataObj.prjData = results; /* prjMdl.project.getBasicInfo(prjId).then(function(basicRst) { if (basicRst !== null && basicRst !== undefined) { let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj; doc.property.basicInformation = basicRst; } resolve(rawDataObj); }); /*/ if (basicRst !== null && basicRst !== undefined) { let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj; doc.property.basicInformation = basicRst; } resolve(rawDataObj); //*/ } else { return reject('No data were found!'); } }); } else { return reject(err); } }); // let prjRst = prjMdl.project.getUserProjectAsync(userId, prjId); // rawDataObj = {}; // rawDataObj.prj = prjRst; // projectDataMdl.getFilterData(prjId, filter, function (results) { // if (results) { // rawDataObj.prjData = results; // basicInformation.then(function(basicRst) { // if (basicRst !== null && basicRst !== undefined) { // let doc = (rawDataObj.prj._doc)?rawDataObj.prj._doc:rawDataObj.prj; // doc.property.basicInformation = basicRst; // } // resolve(rawDataObj); // }); // } else { // return reject(rawDataObj); // } // }); }); } let parallelFunctions = []; for (let pId of prjIds) { let basicRst = await prjMdl.project.getBasicInfo(pId); // 备注:项目basic info不能用.then的方式处理,否则会出现多个prjId返回相同数据的情况,只能先处理好,作为参数传递进去 parallelFunctions.push(getProjectPageData(pId, basicRst)); } let rst = await Promise.all(parallelFunctions); return rst; }