2013-07-02 3 views
1

주로 Javascript 프로젝트에서 Rake를 대체 할 수있는 Jake을 테스트하고 있습니다. 이상한 점은 이벤트가 완료되기 전에 완료 이벤트가 트리거되고 있다는 것입니다. 여기 비동기 작업 완료 전에 Jake 태스크 실행 완료

은 예입니다

task('some_task_1', {async: true}, function() { 
    console.log("|- Doing something"); 

    var execCallback = function() { 
     console.log(" |- Done something"); 
     complete(); 
    }; 

    setTimeout(execCallback, 2000); 
}); 

task('some_task_2', {async: true}, function() { 
    console.log("|- Doing something else"); 

    var execCallback = function() { 
     console.log(" |- Done something else"); 
     complete(); 
    }; 

    setTimeout(execCallback, 2000); 
}); 

task('task_runner', {async: true}, function() { 
    var firstTask = jake.Task['some_task_1']; 
    var secondTask = jake.Task['some_task_2']; 

    firstTask.addListener("complete", function() { secondTask.invoke(); }); 
    secondTask.addListener("complete", function() { complete(); }); 

    firstTask.invoke(); 
}); 

task('default', function() { 
    jake.Task['task_runner'].invoke(); 
}); 

내가 기대 한 것 출력이 될 것이라고 :

|- Doing something 
    |- Done something 
|- Doing something else 
    |- Done something else 

그러나 내가 실제로 얻을 것은 :

|- Doing something 
|- Doing something else 
    |- Done something 
    |- Done something else 

그래서이 제이크에서 비동기가 어떻게 작동해야하는지에 관한 몇 가지 마법? 실제로 어떻게 임원을 완료하기 전에 완전한 사건을 일으키는 것처럼 보입니다.

== 편집 == https://github.com/mde/jake

== 편집 2 ==이

이 된 지금 또 다른 예를 게시 그냥 그래서 제이크의 버전 0.5.16을 사용하고 혼동이없는

비동기 인 작업 내의 작업과 관련이있는 것처럼 정확한 문제를보다 명확하게 보여줘야합니다.

+0

인터넷 검색 노드 Jake는 여러 가지가 있지만 비슷한 결과를 얻습니다. github에 문서 링크 또는 저장소 이름을 제공 할 수 있습니까? 라이브러리를 올바르게 사용하고 있다고 가정 할 때, 특히 addListener를 가정하고, 함수를 호출 할 때 콜백과 그럴듯하게 보입니다. – ChrisCM

+0

그것은 문자 그대로 단지 몇 시간 전에 노크 한 간단한 로컬 제이크 프로젝트입니다. 실제 프로젝트는 자바 스크립트에 타이프 스크립트 파일을 컴파일하지만, 위의 코드는 똑같습니다. 그래서 불행히도 github 링크 또는 아무것도 ... 나는 처음으로 인터넷 검색을 시도했지만 게시물과 내 문제 사이에 직접적인 상관 관계가 없었고, 대부분 타사 라이브러리를 사용하여 시퀀스 된 빌드를 수행하는 방법에 관한 것이 었습니다. 모든 것이 * 잘 될 것 같아서 예상대로 실행되지 않습니다. ( – Grofit

답변

0

노드 0.8에서 0.10 사이에 동작이 변경된 것 같습니다 (버그 또는 기능인지 확실하지 않음). 0.8.14에서 순차적으로 실행중인 Jake 작업 (async : true 포함)은 0.10.x에서 동시에 실행되는 것으로 보입니다.

노드 0.10을 제거하고 대신 0.8을 설치하십시오.

+0

Node v0.10.12가 실행 중이며 최소 예제가 올바르게 작동합니다. – mde

0

나는 이걸 로컬에서 같은 Jake (v0.5.16)로 실행했다.

task('some_task_1', {async: true}, function() { 
    console.log("|- Doing something"); 

    var command = "true"; 
    jake.exec(command, {}, function(){ 
     console.log(" |- Completed doing something"); 
     complete(); 
    }); 
}); 

task('some_task_2', {async: true}, function() { 
    console.log("|- Doing something else"); 

    var command = "true"; 
    jake.exec(command, {}, function(){ 
     console.log(" |- Completed doing something else"); 
     complete(); 
    }); 
}); 

task('some_task_root', {async: true}, function() { 
    var firstTask = jake.Task['some_task_1']; 
    var secondTask = jake.Task['some_task_2']; 

    firstTask.addListener("complete", function() { secondTask.invoke(); }); 
    secondTask.addListener("complete", function() { complete(); }); 

    firstTask.invoke(); 
}); 

내가 변경 모든하지만 I : 당신의 OPTS 객체 후 쉼표를해야하고, 내가 실행하는 뭔가가있을 것입니다 만, 그래서 명령에게 true 명령을했다 - 나는 구문을 수정했다 당신이 (https://github.com/mde/jake/issues/202)에 대한 GitHub의 문제를 연처럼

$ jake some_task_root 
|- Doing something 
    |- Completed doing something 
|- Doing something else 
    |- Completed doing something else 

이 보이는, 그래서이 문제에 저기를 해결하자 : 당신이 설명하지 무엇을 올바른 출력을 얻었다. 최소한의 예제가 올바르게 작동하므로 빌드 스크립트에 특정한 것이 있어야합니다. 좀 더 자세한 정보를 얻고 당신을 분류하려고 노력합시다. :)

+0

잠시 시간이 지났을 때 확인해 볼 수있는 다른 컴퓨터에서의 동작을 보여주는 명확한 예가 나와 있습니다. – Grofit