2016-07-20 1 views
0

저는 node.js를 처음 사용하고 async.forEach()를 사용하여 코드를 작성했습니다. 잘못되었습니다. 실수를하지 않을 것입니다.async.forEach를 사용하는 객체의 배열에 대한 작업

async.forEach(payload.bookings,fun,function(err,res){ 
     var data ; 
     if(err) 
      console.log(err); 
     if(res) { 

      data = res; 
      console.log(data); 
     } 
    }); 

    function fun(booking,cb){ 

     var dataToSave = {}; 

     //service choosen by customer 
     var service_id = booking.serviceId; 

     dataToSave.serviceId = service_id; 

     var query = { 
      services : {$elemMatch : { serviceId : service_id } } 
     }; 

     var projection = { 
      cellPhoneNumber :1, 
      countryCode:1, 
      services :1 
     }; 

     var options = {}; 

     Service.serviceProvider.getServiceProviders(query,projection,options,function(err,data){ 

      if(err) 
       cb(err); 
      else{ 

       if(data && data.length>0){ 

        //getting list of SP which gives the service name given by customer 
        dataToSave.serviceProviderList = []; 

        for(var sp=0;sp<data.length;sp++){ 

         var serviceProvider = {}; 

         serviceProvider.id = data[sp]._id; 

         //searching in services array of one particular service id 
         for(var j=0;j<data[sp].services.length;j++){ 

          if(data[sp].services[j].serviceId==service_id) 
          { 
           serviceProvider.serviceRate = data[sp].services[j].rate; 
           break; 
          } 
         } 
         dataToSave.serviceProviderList.push(serviceProvider); 
        } 
        cb(dataToSave); 
       } 
       else{ 
        cb(); 
       } 
      } 
     }); 
    }; 

는 출력 :

{ serviceId: '578e0da7c8c4cfc807040852', 
    serviceProviderList: 
    [ { id: 578e18f6ed564791083c75ad, serviceRate: 200 }, 
    { id: 578e1996ed564791083c75b4, serviceRate: 200 } ] } 

예상 출력 : 내가 클릭 documentation.When

나는 자신감에 본
{ serviceId: '578e0da7c8c4cfc807040852', 
    serviceProviderList: 
    [ { id: 578e18f6ed564791083c75ad, serviceRate: 200 }, 
    { id: 578e1996ed564791083c75b4, serviceRate: 200 } ] } 
{ serviceId: '578dca50e93da81f0423f6b6', 
    serviceProviderList: [ { id: 578e18f6ed564791083c75ad, serviceRate: 100 } ] } 

그것이 running.only에 유지을 그것을 밖으로 시도가 보여줍니다 console.log()를 사용하여 인쇄 한 객체

+0

로 변경? – Iceman

+0

@Iceman "async": "^ 2.0.0-rc.6" –

+0

'.each()'문법으로 정확히 쓰지만, 문서에서'.forEach()'를 찾을 수 없습니다. – Iceman

답변

1

문제는 아마도 cb(dataToSave); 행에 있습니다. 콜백의 패턴은 cb(err, results);입니다. cb(dataToSave);을 실행하면 async.js가 오류가 발생했다고 생각합니다.

시도 u를 사용하는 비동기 버전 cb(null, dataToSave);

    (...) 
        } 
        dataToSave.serviceProviderList.push(serviceProvider); 
       } 
       cb(null, dataToSave); 
      } 
      (...) 
관련 문제