2017-12-26 14 views
0

는 같은 다양한 종류의 점수를 유지 사전을 고려 할 수 있습니다 대해 forEach 내부에 약속 자바 스크립트에 빨려 루프 수행

A.find({<key>:<value>}) 
.then(res=>{ 
    //gets an array of the response <RES1> 
}) 
배열의

이제 foreach는 요소는, 내가 마지막으로

B.find({_id : <RES1[i].some_id>}) 
.then(res=>{ 
    //again a new array of responses <RES2> 
}) 

같은 일을 오전 , 내가 점수를 수집 C에서 업데이트해야하는 유형을 얻고 난 다시 루프에서 쿼리 예 :

C.find({_id : RES2[i].some_key}).... 

내가 어디 잘못되었는지 모르겠다 !!! 아래 코드 포함

getScoreForEachTypes() { 
    User.find({ company: req.params.company }) 
     .then(users => { 
      var responsesOfAllUsersArr = []; 
      usersForThisCompany = users; 
      users.forEach(user => { 
       responsesOfAllUsersArr.push(Response.find({ email: user.email })); 
      }); 
      return Promise.all(responsesOfAllUsersArr); 
     }) 
     .then(responsesOfAllUsersArr => { 
      var data = { _E: 0, _M: 0, _A: 0, _Q: 0, _E: 0 }; 
      responsesOfAllUsersArr.forEach(el => { 
       el.forEach(_el => { 
        var j = getQuestionType(_el.questionId); 
        data[j] += _el.responseChoice; 
       }) 
      }) 
     }); 
} 

function getQuestionType(qid) { 
    return Question.findOne({ _id: qid }) 
     .then(el => { 
      return el.quesType; 
     }) 
     .catch(err => { 
      console.log("err while fetching type of question", err); 
     }); 
} 
+0

어떻게'getScoreForEachTypes()'를 사용합니까? 이 함수에는 반환 값이 없습니다. –

+0

나중에 내가 붙어있어, 그 반환 값이 더 필요합니다 .. 내가 {_E : 1, _M : 4, _A : 6, _Q : 3, _E 같이 뭔가있을 업데이트 된 데이터를 반환해야합니다 : 0} –

+0

'User.find' 바로 전에'return'을 쓰면 어떨까요? – Zyigh

답변

0

마지막으로 내 문제를 해결했습니다. 방금 ​​배열을 유지 관리해야했습니다.

function a(){ 
    var data = { PE: 0, RM: 0, BA: 0, AIQ: 0, FE: 0 }; 
    var responsesAll = []; 
    var xyz = []; 
    return User.find({ company: req.params.company }) 
     .then(users => { 
      var responsesOfAllUsersArr = []; 
      usersForThisCompany = users; 
      users.forEach(user => { 
      responsesOfAllUsersArr.push(Response.find({ email: user.email 
     })); 
     }); 
    return Promise.all(responsesOfAllUsersArr); 
    }) 
    .then(responsesOfAllUsersArr => { 
     responsesOfAllUsersArr.forEach(el => { 
      el.forEach(_el => { 
       responsesAll.push(_el); 
       xyz.push(getQuestionType(_el.questionId)) 
      }) 
     }) 
     return Promise.all(xyz); 
    }).then(xyz => { 
     for (var i = 0; i < xyz.length; i++) { 
      data[xyz[i].quesType] += parseInt(responsesAll[i].responseChoice); 
     } 
     return data; 
    }) 
}