2014-01-28 4 views
2

나는 노드를 배우는 중이며 디렉토리를 되풀이하고 패턴과 일치하는 파일의 약속을 반환하는 기능이 있습니다. 이 꽤 잘 작동하지만 동시에 유형의 수의 파일을 처리 할 수 ​​있도록하려면, 나는 다음과 같은 기능을 체인 오전 :이 약속 체인을 작성하는 더 나은 방법

findFiles(scriptLocation, '.type1.').then(function (type1Files) { 
    console.log('type1Files: ' + type1Files) 
    findFiles(scriptLocation, '.type2.').then(function (type2Files) { 
     console.log('type2Files: ' + type2Files) 
     findFiles(scriptLocation, '.type3.').then(function (type3Files) { 
      console.log('type3Files: ' + type3Files) 
     }) 
    }) 
}) 

을하지만 더 많은 종류를 추가로 꽤 실수 얻을 수 있습니다. 나는 두 번째 버전의 구문을 좋아

Q.all([ 
    findFiles(scriptLocation, '.type1.') 
    , findFiles(scriptLocation, '.type2.') 
    , findFiles(scriptLocation, '.type3.') 
]).then(function(type1Files, type2Files, type3Files){ 
    // all files returned in the first parameter... 
}) 

을 시도했지만 꽤 결과가 개별적으로 반환하지만 하나의 결과로 롤업되지 않기 때문에 내가하고 싶은 일을하지 않습니다.

나는 약속 라이브러리로 Q를 사용하고 있습니다. 대신

답변

1

사용 spread 다음 DOCs에서

Q.all([ 
    findFiles(scriptLocation, '.type1.') 
    , findFiles(scriptLocation, '.type2.') 
    , findFiles(scriptLocation, '.type3.') 
]).spread(function(type1Files, type2Files, type3Files){ 
    // ... 
}) 

: 당신이 배열에 대한 약속이있는 경우

, 당신은 다음을 대체 spread를 사용할 수 있습니다. spread 함수는 fulfillment 핸들러의 인수에 값을 "분산"합니다. 거부 처리기는 실패의 첫 번째 신호에서 호출됩니다. 즉, 수신 된 약속 중 먼저 실패한 것이 거부 처리자에 의해 처리됩니다.

+0

글쎄, 나는 그것을 시도했지만 작동하지 않았다. (다른 곳에서 오류가 있었음에 틀림 없다.) 그리고 나서 나는 뭔가 다른 것을 위해 고안된 자신을 확신하는 예제를 보았다. 나를 똑바로 세워 줘서 고마워. – akaphenom

+0

문제 없습니다. 내가 도왔 으면 좋겠다 :-) – qwertynl

관련 문제