@Abarber tarafından önerilen çözümün iyi bir çözüm olduğunu varsaydık , çünkü kullanıyor (new Date()).getTime()
bu yüzden milisaniyelik bir pencereye sahip vetick
bu aralıkta çarpışma olması durumunda kullanır, burada eylemde açıkça görebileceğimiz gibi yerleşik kullanmayı düşünebiliriz:
İlk olarak, 1/1000 pencere çerçevesinde nasıl çarpışmalar olabileceğini kullanarak (new Date()).getTime()
şunları görebiliriz:
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
İkinci olarak, 1/1000 penceresinde çarpışmaları önleyen önerilen çözümü deniyoruz:
console.log( window.mwUnique.getUniqueID() ); console.log( window.mwUnique.getUniqueID() );
VM1159:1 14696154132130
VM1159:1 14696154132131
Bununla process.nextTick
birlikte, olay döngüsünde çağrılan düğüm gibi işlevleri tek olarak kullanmayı düşünebiliriz tick
ve burada iyi açıklanmıştır . Tabii ki tarayıcıda yok, process.nextTick
bu yüzden nasıl yapılacağını bulmalıyız.
Bu uygulama bir kuracaktır nextTick
olan tarayıcıda I / O en yakın işlevlerini kullanarak tarayıcıda işlevini setTimeout(fnc,0)
, setImmediate(fnc)
, window.requestAnimationFrame
. Önerildiği gibi burada biz ekleyebilir window.postMessage
, ama bir ihtiyacı beri okuyucuya bu terk addEventListener
yanı. Burada daha basit tutmak için orijinal modül sürümlerini değiştirdim:
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() )
})
})
Yani 1/1000 penceresinde var:
getUniqueID(function(c) { console.log(c); });getUniqueID(function(c) { console.log(c); });
undefined
VM1160:1 1469615416965
VM1160:1 1469615416966