2014-12-25 4 views
0

노드 v0.11.13에서 Object.observe()를 사용하고 있습니다.Object.observe order

관찰 콜백이 호출 될 때가 예측 될 수없는 것처럼 보입니다. 버그 또는 기능입니까?

이 코드를 살펴 :

a [ { type: 'update', object: { foo: 2 }, name: 'foo', oldValue: 1 } ] 
b [ { type: 'update', object: { foo: 2 }, name: 'foo', oldValue: 1 } ] 

내가 반대 순서를 기대 :

function observe(obj,name){ 
    Object.observe(obj, function(o){ 
     console.log(name,o); 
    }); 
    return obj; 
} 
var boo = observe({foo:1},'a'); 
var doo = observe({foo:1},'b'); 
doo.foo=2; 
boo.foo=2; 

출력은 같다. 이것이이 기능의 사양 또는 노드 impl과 관련이 있는지 궁금합니다.

+0

과 같은 질문은 특정 라이브러리와 아무 상관이 없습니다. 자바 스크립트 개체를 만들고 해당 생성자를 순서 또는 실행으로 호출하려고합니다. –

답변

1

값이 변경되는 순서보다는 관찰자가 등록되는 순서를 따르는 것처럼 보입니다.

var doo = observe({foo:1},'a'); 
var boo = observe({foo:1},'b'); 
var zoo = observe({foo:1},'c'); 
var too = observe({foo:1},'d'); 

zoo.foo = 2; 
too.foo = 2; 
doo.foo= 2; 
boo.foo= 2; 

a [Object] 
b [Object] 
c [Object] 
d [Object] 

실행 스택 처리를 통한 동기 실행 중 동일한 객체에 대한 여러 변경 사항이 함께 처리되므로 의미가 있습니다.

+0

감사합니다. 값이 변경된 순서대로 가져올 수있는 방법이 있습니까? 어떻게 든 주문을 알아낼 수 있을까요? – DuduAlul

+0

음, 정확히 무엇을 얻으려고하십니까? 왜 이것을 필요로합니까? – plalx