2017-03-27 3 views
0

나는 텍스트, 이미지, 비디오 및 태그 옵션이있는 게시물이 있습니다. 텍스트 나머지는 선택 사항입니다. 현재는 async을 사용하고 있습니다. 태그가 비어 있으면 이미지를 업로드하고 이미지가 제공되지 않으면 비디오를 업로드 할 수 있고, 모든 이미지와 비디오를 업로드 한 다음 데이터베이스에 저장하면 어떻게 처리 할 수 ​​있습니까? 다음 샘플 입력 선택 사양 인 비디오 및 이미지 업로드Nodejs - 다중 배열 처리

images: [{"image":"image1"},{"image":"image2"}] 
videos: [{"video":"video1"},{"video":"video2"}] 
tags: [{"userId":2},{"userId":23} ] 
text: having a good day :) 
+1

나는'이러한 여러 배열을 처리하는 방법을 이해하려고 노력하고, 코딩 아무것도 havn't는 더 많은 정보/코드 샘플 봉오리 –

+0

필요' – Khan

+0

async'' 당신은 당신의 비동기 함수 내에서 try/catch를 사용하십시오 이미지, 동영상 등 –

답변

1

사용 async parallel 있습니다. 서비스가 다중 삽입을 허용하지 않는 경우에는 asynceach 또는 map을 사용해야합니다.

const async = require("async"); 

// example data 
const data = { 
    images: [{"image":"image1"},{"image":"image2"}] 
    videos: [{"video":"video1"},{"video":"video2"}] 
    tags: [{"userId":2},{"userId":23} ] 
    text: "having a good day :)" 
} 

if(!data.text){ 
    //return 'text is required' message 
} 
else{ 
    const imageUrls = []; 
    const videoUrls = []; 

    // http://caolan.github.io/async/docs.html#parallel 
    async.parallel({ 
     uploadImages: function(callback){ 
      async.each(data.images, function(image, eachCallback){ 
      // upload each image 
      // push returned url in imageUrls 
      // call return eachCallback(), or if err then return eachCallback(err) 
     }, function(err){ 
      if(err){ 
       return callback(err) 
      } 
      else{ 
       return callback() 
      } 

      }) 
     }, 
     uploadVideos: function(callback){ 
      async.each(data.videos, function(video, eachCallback){ 
      // same process as images 
     }, function(err){ 
      if(err){ 
       return callback(err) 
      } 
      else{ 
       return callback() 
      } 

      }) 

     } 
    }, function(err, results){ //final callback of async parallel 
     if(err){ 
      //handle err 
     } 
     else{ 
      const obj = { 
       images: imageUrls, 
       videos: videoUrls, 
       tags: data.tags, 
       text: data.text 
      } 

      //insert obj to db and respond with success message 
     } 
    }) 
}