2017-03-06 1 views
1

이 코드는 루프 만 처음으로 실행됩니다. 어떻게 해결할 수 있는지 말해주십시오. 나는 루프의 다음 값을 실행하기 전에 get_profile_image() 함수를 실행해야한다.이 코드는 for 루프에서만 처음 실행된다. Q 라이브러리를 사용하여 for 루프에 대한 약속을 적용하는 방법은 무엇입니까?

+0

for 루프 내부로 돌아 오는 이유 - 한 번만 실행되는 이유입니다. –

+0

여러 가지 방법으로 읽을 수없고 잘못되어 코드를 표시하는 대신 문제를 설명하려고하면 더 좋을 것입니다 ... – Jaime

답변

1

function response(){ 
 
     var deferred = q.defer(); 
 

 
    for(var i=0; i < results.length; i++){ 
 

 

 
     var from_name = results[i].from_name; 
 
     var request_from = results[i].request_from; 
 

 
     var empty = new Array(); 
 
     friend_requests.push(empty); 
 
     friend_requests[i].push(from_name); 
 
     friend_requests[i].push(request_from); 
 
     var new_array = friend_requests[i]; 
 
     function get_profile_image(){ 
 
     var profile_image_defer = q.defer(); 
 
     var dir = "./public/img/users_directory/"+request_from; 
 
     fs.readdir(dir, function(err, files) { 
 
      files.forEach(function(f) { 
 
       var file = f.substr(0, f.lastIndexOf('.')); 
 

 
       if(file === "profile_image"){ 
 
        profile_image = "../img/users_directory/"+email+ "/" +f; 
 
        new_array.push(profile_image); 
 
       } 
 
      }); 
 
      profile_image_defer.resolve(profile_image); 
 
      }); 
 

 
      return profile_image_defer.promise; 
 

 
     } 
 
     
 
     get_profile_image().then(function(){ 
 
     deferred.resolve(friend_requests); //This runs only for first time i.e. i=0 
 

 
     }); 
 

 
     return deferred.promise; 
 

 
    } 
 

 

 

 

 
    } 
 
    response().then(function(){ 
 
    console.log(friend_requests); 
 
    res.send(friend_requests); 
 
    })

대신 루프를 사용하는 모든 결과에 대한 약속을 반환하는 함수로 results.map()를 사용해보십시오.

지금은 불가능한 동일한 함수에서 여러 번 반환하려고합니다. 음, 생성자에서는 가능하지만 종류는 동일하지 않습니다.

results.map()과 함께 사용할 수있는 것보다 result 요소를 사용하고 약속을 반환하는 함수가있는 경우 Promise.all()을 사용하여 모든 약속을 기다리는 것이 좋습니다.

코드에 문제가 너무 많아 하나의 수정을 가리킬 수 없습니다. 처음부터 작성해야 할 것입니다. 당신이 염두에 두어야 할 점은 같은 함수에서 return을 여러 번 사용할 수 없다는 것입니다. 왜냐하면 첫 번째 리턴은 함수에서 반환 될 것이고 함수는 다른 것을 실행하지 않을 것이기 때문입니다. return 문은 심지어 생성자를 종료합니다.

관련 문제