Skip to content

16 - until #2149

Open
Open
@jay6697117

Description

@jay6697117
<script setup lang="ts">
import { ref, watch, watchEffect } from 'vue';

const count = ref(0);

/**
 * Implement the until function
 */

function until(initial) {
  function toBe(value) {
    return new Promise<void>((resolve, reject) => {
      //watch
      const unwatch = watch(initial, newVal => {
        if ((newVal === value)) {
          unwatch();
          resolve();
        }
      });
      //watchEffect
      const unwatch = watchEffect(() => {
        if (initial.value === value) {
          unwatch();
          resolve();
        }
      });
    });
  }

  return {
    toBe
  };
}

async function increase() {
  count.value = 0;
  setInterval(() => {
    count.value++;
  }, 1000);
  await until(count).toBe(3);
  console.log(count.value === 3); // Make sure the output is true
}
</script>

<template>
  <p @click="increase">Increase</p>
</template>

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions