ES6 Generator函数异步应用案例(二)

    //秒杀商品剩余件数类似数据时效性要求高
        //目前web即时消息通讯的解决方案:轮询、长轮询、websocket

        //案例:模拟客户端通过轮询方式向服务发送异步请求获取数据

        let ajax = function* () {
            yield new Promise((resolve, reject) => {
                //执行异步操作。向服务器发送异步请求,获取数据
                setTimeout(() => {
                    let ret = Math.floor(Math.random() * 100)

                    resolve({ message: ret })
                }, 1000)

            })
        }

        let sendRquest = function () {
            console.log("发送请求开始")

            let it = ajax()
            //{value: Promise, done: false}
            let ret = it.next()
            ret.value.then(data => {
                console.log("返回结果", data.message)

                if (data && data.message > 30) {
                    setTimeout(() => {
                        sendRquest()
                    }, 1000)
                } else {
                    console.log("over")
                }

            })
        }

        sendRquest()

posted @ 2021-02-26 22:36  abcdefgab  阅读(68)  评论(0)    收藏  举报