@abarber가 제안한 솔루션 (new Date()).getTime()
이 밀리 초의 창 tick
을 사용하고이 간격에서 충돌이 발생 하는 경우 a 를 합산 하기 때문에 좋은 솔루션이라고 가정하면 여기에서 명확하게 볼 수 있듯이 내장형을 사용할 수 있습니다.
다음을 사용하여 1/1000 창 프레임에서 충돌이 발생할 수있는 방법을 여기서 확인할 수 있습니다 (new Date()).getTime()
.
console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() )
VM1155:1 1469615396590
VM1155:1 1469615396591
console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() )
VM1156:1 1469615398845
VM1156:1 1469615398846
console.log( (new Date()).getTime() ); console.log( (new Date()).getTime() )
VM1158:1 1469615403045
VM1158:1 1469615403045
두 번째로 1/1000 창에서 충돌을 방지하는 제안 된 솔루션을 시도합니다.
console.log( window.mwUnique.getUniqueID() ); console.log( window.mwUnique.getUniqueID() );
VM1159:1 14696154132130
VM1159:1 14696154132131
즉 process.nextTick
, 이벤트 루프에서 호출 되는 노드와 같은 함수를 단일 로 사용하는 것을 고려할 수 있으며 여기에tick
잘 설명되어 있습니다 . 물론 브라우저에는 없어서 process.nextTick
어떻게해야하는지 알아 내야합니다.
이 구현이 설치할 nextTick
수있는 브라우저에서 I / O에 가장 가까운 기능을 사용하여 브라우저의 기능을 setTimeout(fnc,0)
, setImmediate(fnc)
, window.requestAnimationFrame
. 여기에서 제안한대로를 추가 할 수 있지만는 window.postMessage
필요하므로 독자에게 남겨 둡니다 addEventListener
. 여기에서 더 간단하게 유지하기 위해 원래 모듈 버전을 수정했습니다.
getUniqueID = (c => {
if(typeof(nextTick)=='undefined')
nextTick = (function(window, prefixes, i, p, fnc) {
while (!fnc && i < prefixes.length) {
fnc = window[prefixes[i++] + 'equestAnimationFrame'];
}
return (fnc && fnc.bind(window)) || window.setImmediate || function(fnc) {window.setTimeout(fnc, 0);};
})(window, 'r webkitR mozR msR oR'.split(' '), 0);
nextTick(() => {
return c( (new Date()).getTime() )
})
})
따라서 우리는 1/1000 창에 있습니다.
getUniqueID(function(c) { console.log(c); });getUniqueID(function(c) { console.log(c); });
undefined
VM1160:1 1469615416965
VM1160:1 1469615416966