欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记录一下promise、异步等待使用案例1

程序员文章站 2022-07-03 09:33:56
...
// 场景: 在桥连接(或类似的异步请求完成)后,才能继续执行查询数据操作。
//       桥连接请求初始可能失败,那么写个轮训,在规定时间内连续请求至成功,超时则不请求。
        
        async function mouted() {
            // 场景1:当桥连接失败也要继续执行
            try {
                await tryToGetBridgeInfo();
            }catch(e) {
                console.log(e.message, 23232)
            }
            await query();
            // 场景2:当桥连接失败不继续执行
            // await tryToGetBridgeInfo();
            // await query();
        }

        mouted();

        // 定时器请求获取桥连接至成功,最多请求5次,5次内请求都失败,那么不再请求。
        async function tryToGetBridgeInfo() {
            return new Promise(async (resolve, reject) => {
                let count = 0;
                let timer = setInterval(async () => {
                    count++;
                    if (count >= 6) {
                        clearInterval(timer);
                        return reject(new Error('请求次数超限'))
                    }
                    console.log(`当前是第${count}次请求`)
                    await getBridgeInfo(count);
                    clearInterval(timer);
                    resolve();
                }, 500);
            })
        }

        // 请求桥连接
        async function getBridgeInfo(askCount) {
            return new Promise((resolve, reject) => {
                console.log('准备请求桥连接')
                // 请求成功需要第几次
                let linkSuccessNeedCount = 4;
                if (askCount < linkSuccessNeedCount) {
                    return reject('桥连接失败');
                }
                console.log('桥连接成功')
                resolve('桥连接成功')
            })
        }

        // 一般的查询
        async function query() {
            setTimeout(() => {
                console.log("获取到的接口数据", [{
                    id: 1
                }])
            }, 0)
        }