系统、网站、API站点,简单高效开发

平台介绍 >> js/jsfun/fnQueue.js 队列操作

js/jsfun/fnQueue.js 队列操作


    //队列遵循的是先进先出(FIFO)的原则,即最先进入队列的元素将是最先被移除的。队列的操作主要限定在队头和队尾进行,包括入队(enqueue)操作在队尾添加元素,出队(dequeue)操作在队头移除元素。队列中没有元素时,称为空队列。
    //构造队列
    let qKey = "q_1"
    let qKey2 = "q_2"
    //初始化队列,默认元素ID为当前http请求ID值,也可以自定义
    fnQueue_init(qKey, 10, 20000)
    let elementID0 = "elementID_0"
    let elementID1 = "elementID_1"
    let elementID2 = "elementID_2"
    let elementID3 = "elementID_3"
    let elementID4 = "elementID_4"
    let elementID5 = "elementID_5"
    for (let i = 0; i < 6; i++) {
        fnQueue_push(qKey, "elementID_" + i)
    }
    for (let i = 0; i < 6; i++) {
        fnQueue_push(qKey2, "elementID_" + i)
    }

    console.log("队列全部元素:",    fnQueue_list(qKey))
    console.log("队列长度:", fnQueue_len(qKey))
    console.log("是否首个元素:0:", fnQueue_isFirst(qKey, elementID0))
    console.log("是否首个元素:1:", fnQueue_isFirst(qKey, elementID1))
    console.log("弹出首个元素:", fnQueue_pop(qKey))
    console.log("是否首个元素:0:", fnQueue_isFirst(qKey, elementID0))
    console.log("是否首个元素:1:", fnQueue_isFirst(qKey, elementID1))
    console.log("队列长度:", fnQueue_len(qKey))
    console.log("队列全部元素:",    fnQueue_list(qKey))

    console.log("队列2全部元素:",    fnQueue_list(qKey2))
    console.log("全部队列", fnQueue_allList())

    console.log("删除队列元素", fnQueue_delete(qKey,elementID4))
    console.log("队列长度:", fnQueue_len(qKey))
    console.log("队列全部元素:",    fnQueue_list(qKey))


    console.log("队列首元素:", fnQueue_first(qKey))

    console.log("队列当前元素默认ID", fnQueue_defaultID())

    console.log("队列当前元素索引位置", fnQueue_index(qKey,elementID4))

    console.log("队列信息:", fnQueue_info(qKey))

    //判断队列元素是否是首元素,如果是,则进入业务
    if (fnQueue_isFirst(qKey, elementID1)) {
        console.log("queue_run_business 执行业务:", qKey, elementID1)
    } else {
        console.log("queue_run_business 非法进入业务:",qKey, elementID1)
    }

    //判断队列元素是否是首元素,如果还不是首元素,可以for也可以一直选项等待队列的首元素弹出
    for (let i = 0; i < 100; i++) {
        if (fnQueue_isFirst(qKey, elementID1)) {
            console.log("我已经是队列首元素了,开始执行业务");
            console.log("我的业务执行完了,记得将首元素移出,可以弹出首元素,也可以删除指定元素ID")
            //如果已经知道首元素ID,建议用fnQueue_delete,删除指定元素比较靠谱,防止当前使用首元素已经被弹出
            //弹出首元素
            fnQueue_pop(qKey)
            //删除执行元素
            //fnQueue_delete(qKey,elementID1)
        } else {
            console.log("我还没进入队列首元素,只能耐心等待");
            //休眠时间最好是执行业务的时间,或者1/2,太长了就会浪费大家等待时间,太短会造成CPU的资源浪费,适合最好
            fnTime_sleep(20)
        }
    }


    let bln= fnQueue_waitToFirst(qKey,elementID1,5000)
    if(bln){
        console.log("我已经是队列首元素了,开始执行业务");
        console.log("我的业务执行完了,记得将首元素移出,可以弹出首元素,也可以删除指定元素ID")
        //如果已经知道首元素ID,建议用fnQueue_delete,删除指定元素比较靠谱,防止当前使用首元素已经被弹出
        //弹出首元素
        fnQueue_pop(qKey)
        //删除执行元素
        //fnQueue_delete(qKey,elementID1)
    }else {
        console.log("我已经被删除了");
    }


    console.log("清除队列元素", fnQueue_clear(qKey));
    console.log("清除全部队列元素", fnQueue_clearAll());

备案号:闽ICP备20003806号     厦门市湖里区陈朝能网络技术工作室