2013-12-17 4 views
3

현재 약속/Q 라이브러리를 사용하는 코드를 리팩터링하는 방법을 정말 잘 이해하지 못하고 있습니다."콜백 피라미드"를 약속 기반 버전으로 리팩토링하는 방법

다음과 같은 일반적인 기본 예제를 생각해보십시오. 동일한 파일을 mongodb에 두 번 가져온 테스트 케이스가 있고 두 번째 가져 오기의 데이터 집합 이름 끝에 약간의 수정자가 있는지 확인합니다.

그래서 어떻게 할 것이 약속을 사용하여 :

importDataSet('myFile.csv',function() { 
    importDataSet('myFile.csv',function() { 
    DataSet.find({title: 1}, function (err, result) { 
     result.length.should.be.equal(2); 
     result[0].title.should.startWith('myFile'); 
     result[1].title.should.startWith('myFile'); 
     result[0].title.should.not.be.equal(result[0].title); 
     done(); 
     }); 
    }); 
    }); 
    done(); 
}); 

(최종 콜백가) (다)? 함수 시그니처를 변경하지 않고 (마지막 매개 변수로 콜백을 사용하는 규칙을 따랐습니다). done()이 코드에서 두 번 호출되는 이유

답변

1

나는 잘 모르겠지만, 그없이, 그것은 유사 보일 수 있습니다 : 나에서 복사 및 붙여 넣기 오류했습니다 두 번 수행 호출 참

importDataSet('myFile.csv') 
    .then(function() { 
    return importDataSet('myFile.csv') 
}).then(function() { 
    return DataSet.find({title: 1}) 
}).then(function (result) { 
    result.length.should.be.equal(2); 
    result[0].title.should.startWith('myFile'); 
    result[1].title.should.startWith('myFile'); 
    result[0].title.should.not.be.equal(result[0].title); 
    done(); 
}); 
+0

감사합니다 :). –

+0

수락 된 답변을 편집하는 것이 일반적으로 적절하지 않다고 생각합니다. 편집이 유효하다는 것을 확인할 수 있습니까? – Strawberry