2014-01-25 6 views
4

저는 함수형 프로그래밍을 처음 접했고 누군가는 주요 고차 함수를 이해하기 위해 lodash을 추천했습니다.언제 lodash.after()를 사용할 수 있습니까?

var saves = ['profile', 'settings']; 

var done = _.after(saves.length, function() { 
    console.log('Done saving!'); 
}); 

_.forEach(saves, function(type) { 
    asyncSave({ 'type': type, 'complete': done }); 
}); 
// → logs 'Done saving!', after all saves have completed 

샘플 코드는 위의 asyncSave()를 구현하지 않았다, 그래서 나는 나 자신을 위해 기능을 구현해야합니다 :

브라우징 lodash의 API 문서는, 나는이 sample code_.after()에 대한 파악하지 못했습니다. 하지만 어떻게 구현해야할지 모르겠습니다. 내가 _.after()의 사양을 이해하지 못하기 때문입니다.

누군가가 API 문서보다 더 쉽게 기능을 설명하면 좋을 것입니다. 또는 기능에 대한 이해하기 쉽고 실용적인 예제가 큰 도움이 될 것입니다. 감사!

답변

7

_.after 인수 카운트 n 및 기능 f을 취한다, 그리고 우리가 fp ("F 프라임 '에 대한)를 호출 할 수있는 새로운 기능을 반환합니다. fp 함수는 호출 된 횟수를 계속 유지합니다. fp이 호출 된 횟수가 n보다 작 으면 fp을 호출하면 호출 된 횟수를 유지하는 것 외에는 아무 작업도 수행하지 않습니다. fp이 호출 된 횟수가 n 이상이면 f이 호출됩니다.

그래서 :

var _ = require("lodash"); 
var fp = _.after(3, function() { console.log("OMG!"); }); 
fp(); // Nothing 
fp(); // Nothing 
fp(); // Prints "OMG!" 

asyncSave는이 (전달 된 객체의 type 필드) 주어진 데이터 유형에 대한 비동기 저장 작업을 수행 뭔가하고 운전 호출을 저장 마무리에 따라 것입니다 기능 콜백 (정확히 전달 된 객체의 complete 필드).

_forEach 루프는 saves에 항목 당 한 번 asyncSave을 호출하여 항목 당 하나의 저장 작업이 saves에 시작됨을 의미합니다. doneasyncSave의 콜백이므로 저장 작업 당 한 번 done이 호출됩니다. done_.after으로 생성되었으므로 _.after에 전달 된 숫자는 saves.length과 같으므로 _.after에 전달 된 익명 함수는 번이 실제로 실행될 때까지 실행되지 않습니다. 즉, 예제에서 시작된 모든 저장 조작이 완료 될 때까지 호출되지 않습니다.

+0

자세한 설명을 주셔서 감사합니다. 당신의 예제는 lodash API doc의 예제보다 훨씬 이해하기 쉽다. – philipjkim