用promise封装ajax_Promise.all 实践 , async 与 promise.then 混着用

21c75e89038f12649096fec4cfcb63ff.png

首先是 async/await
这东西跟 Promise 的关系搞清楚

用 Promise 来封装 ajax 之后, 可以比较省事:

async function fetchData() {
    let result = await ajax('/url')
    //...
}

代码省事了,也好看

但是如果有多个 ajax,怎么办?

async function doSth() {
    let result = await ajax('/url')
    let result2 = await ajax('/url2')
    //...
}

嗯,也可以,但是如果这俩 ajax 没什么关系,那就没必要等待了,可以一次完成,用 Promise.all

async function doSth() {
    let [result, result2] = await Promise.all([ajax('/url'), ajax('/url2')])
    //...
}

再来一个,部分请求,可能有,可能没有,这几个请求,没有太大的关联,但是等都完成之后,还要继续操作

async function doSth() {
    let ps = []
    let param1 = null
    let param2 = null
    // 这里有其他代码来处理参数
    let result1 = null
    let resule2 = null
    if (param1) {
        ps.push(
            ajax('/url', param1).then(result => {
                //
                result1 = result
            })
        )
    }
    if (param2) {
        ps.push(
            ajax('/url2', param2).then(result => {
                //
                result2 = result
            })
        )
    }
    await Promise.all(ps)
    //...
    // 甭管有几个,等都完成了,继续执行
}

自己这段时间一直觉得好像 async/await 才是未来, 尽量避免 promise.then 的写法
然后遇到上面最后这个需求, 结果发现如果不用 then ,代码就好别扭,为了实现不用 then,特意做了一个假的 ajax,然后还加了一堆判断

function fetchData(url, param) {
    if (url) {
        return ajax(url, param)
    } else {
        return Promise.resolve(fakeResult)
    }
}
async function doSth() {
    let param1 = null
    let param2 = null
    // 这里有其他代码来处理参数
    let [result1, result2] = await Promise.all([ajax(param1 ? '/url' : null), ajax(param2 ? '/url2' : null)])
    if (result1) {
        //balabala
    }
    if (result2) {
        //balabala
    }
}

这份代码太搓了, 为了 async 而 async, 本末倒置了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值