until

直到

主要用于异步等待

Usage

基础

import { ref } from 'vue'
import { until } from '@/uni_modules/tob-use'

const source = ref(false)

const instance = until(source)

const runAsync = async () => {
    await instance.toBeTruthy() // 等到 source 为真时才接着往下执行

    console.log("source 为真了")
}

runAsync() // 跑一个异步

setTimeout(() => {
    source.value = true // 设置为 true 后,runAsync 才接着执行
}, 2000)

实例方法

除了上述的 toBeTruthy 之外,还有以下其他方法

import { ref } from 'vue'
import { until } from '@/uni_modules/tob-use'

const source = ref(false)

const instance = until(source)

const runAsync = async () => {
    await instance.toBeTruthy() // 为真时
    await instance.toBeNaN() // 为 NaN 时
    await instance.toBeNull() // 为 null 时
    await instance.toBe(100) // 等于具体内容时
    await instance.toBeUndefined() // 为 undefined 时
    await instance.toContains([1, 2, 3]) // 为数组的其中之一时
    
    await instance.toMatch(v => v > 2) // 等于自定义规则

    await instance.changed() // 变化时
    await instance.changedTimes(3) // 变化 3 次时
}

注意如果是数组类型的源只包含 toMatch, toContains, changed, changedTimes

Not

import { ref } from 'vue'
import { until } from '@/uni_modules/tob-use'

const source = ref(false)

const instance = until(source)

const runAsync = async () => {
    await instance.not.toBeTruthy() // 不为真时
    await instance.not.toBeNaN() // 不为 NaN 时
    await instance.not.toBeNull() // 不为 null 时
    await instance.not.toBe(100) // 不等于具体内容时
    await instance.not.toBeUndefined() // 不为 undefined 时
    await instance.not.toContains([1, 2, 3]) // 不为数组的其中之一时
    
    await instance.not.toMatch(v => v > 2) // 不等于自定义规则
}

选项

import { ref } from 'vue'
import { until } from '@/uni_modules/tob-use'

const source = ref(false)

const instance = until(source)

const options = {
	deep: false, // 深层监听,默认为 false
	throwOnTimeout: false, // 超时抛错,默认为 false
    timeout: 2000, // 最后期限,单位为毫秒,默认不定义
	flush: 'sync', // 同步时机,支持 pre,post,sync,默认为 pre
}

const runAsync = async () => {
    await instance.toBeTruthy(options) 
    await instance.toBeNaN(options) 
    await instance.toBeNull(options) 
    await instance.toBe(100, options) 
    await instance.toBeUndefined(options) 
    await instance.toContains([1, 2, 3], options)
    await instance.toMatch(v => v > 2, options) 
}
Last Updated:
Contributors: markthree