2012-02-14 2 views
0

화각에 따라 같은 주제에 관해서 두 가지 질문이 있습니다.동시성/비 동시성의 가정에 대한 모범 사례

myFunction(function(something) { 
    console.log('a'); 
}); 

console.log('b'); 

내 요점은 다음과 같습니다 : 그것을인가

function myFunction(callback) { 
    //do something 
    callback(something); 
} 

지금 누군가가이 함수를 호출 :

의이 실행 된 함수의 반환 값을받는 콜백을 허용하는 기능이있어 가정 해 봅시다 이벤트 'a'와 'b'의 순서에 대한 가정을하기 위해 사용자 (함수를 호출하는 사용자)를 위해 항상 저장 하시겠습니까? 결과 : 정확한 동작에 의존하는 잘못된 코딩 스타일로 간주됩니까? (runnig 시간에 대해서는 이야기하지 않지만 동시성이나 비동기성에 관해서는 말하지 않는다!) 누군가가 myFunction이 비동기 적이라고 생각할 수 있으므로 'b'가 발생해야합니다. 항상 'a'앞에이 있습니다.

다른 방법으로 : 특정 기능을 설계 한 사람으로서 예측할 수없는 순서로 작성하는 것이 나쁜 코딩 스타일로 간주됩니까? 어쩌면 특정 사건이 일어날 때까지 기다려야 비동기 적 대답이 생길 수도 있고, 아니면 정확한 행동이 기다려지지 않아 비동기 성이 요구되지 않을 수도 있습니다. 이 경우 process.nextTick (...)을 추가하여 항상 동일한 동작을 유지하는 것이 가장 좋습니까?

미리 감사드립니다.

+7

개발자가 안전하기를 원한다면, 개발자는 myFunction이 어떻게 사용되는지를 이해해야한다. –

+0

이것은 매우 외교적 인 답변입니다 :) 그 기능을 설계하는 사람의 경우에는 무엇을해야할까요? – zaphod1984

+0

... 아래의 사용자 의견에 응답하면 사용자가 해당 동작을 예측할 수없는 기능을 만드는 것이 현명하지 않을 수 있습니다. 특정 상황을 동기식으로 최적화하여 최적화 할 수 있다면 콜백이 필요한 비동기 함수로 문서화해야합니다. 동기화가 끝나면 준비가되면 콜백을 실행할 수 있습니다. –

답변

1

일반적으로 중요하지 않도록 코드를 작성해야합니다. 그러나, 예를 들어 뭔가가 생성자에서 이벤트를 자체적으로 내 보낸 경우와 같이 방출 이벤트를 지연해야하는 경우가 있습니다. 그 시간에 이미 청취 할 수있는 방법이 없습니다.

+0

네, 요점을 봅니다. 생성자에서 이벤트가 발생하는 경우 프로그래머가 지연되는지 확인해야합니다. 하지만 누군가가 함수를 호출하고 * 이번에는 * 비동기식으로 만들기 위해 필요하지 않습니다 (IO, FS 액세스 ...). 다른 경우에는 * 필요한 것입니까? – zaphod1984

+0

@ zaphod1984 : 모듈 docs 나 그 코드가 다른 말을하지 않는 한 즉시 콜백 할 수 있다고 가정합니다. 일반적으로 코드가 복잡해지지 않으므로 왜 안되 죠? – thejh

+0

예제로 돌아가서 나는 요지를 만들었습니다 : https://gist.github.com/1834492 나는 이것을 만들지 않았고, 정확히이 문제를 가로 질러 왔기 때문에이 질문에 나를 이끌었습니다. 'someAsynchrounosFunction'가 예상대로 asynchrounos를 실행하지 않으면, 그 코드는 작동하지 않습니다. – zaphod1984

관련 문제