Нет описания

nextTick.js 470B

123456789101112131415161718192021222324252627282930
  1. let tickStack = []
  2. let isHolding = false
  3. export function nextTick(callback = () => {}) {
  4. queueMicrotask(() => {
  5. isHolding || setTimeout(() => {
  6. releaseNextTicks()
  7. })
  8. })
  9. return new Promise((res) => {
  10. tickStack.push(() => {
  11. callback();
  12. res();
  13. });
  14. })
  15. }
  16. export function releaseNextTicks() {
  17. isHolding = false
  18. while (tickStack.length) tickStack.shift()()
  19. }
  20. export function holdNextTicks() {
  21. isHolding = true
  22. }