promise 改写async/await的正确方式

如果promiseA是一个异步请求,在UI上为了便于展示需要在请求开始的时候设置loading:true,结束的时候设置loading:false。

promise形式就是:


let loading = true;

promiseA.then(data => {

    loading = false;

}).catch(e => {

    loading = false;

}

怎么转换成promise形式呢?

我一开始转换成:


async function transform () {

    loading = true;

    await promsieA;

    loading = false;

}

发现只有请求成功的时候才会生效,后来发现await 后面跟的语句只有promise转换成fulfilled才会生效,failed状态时不会。运行:


async function test() {

    await Promise.reject();

    console.log('rejected');

}

test()

永远不会输出‘rejected'。

正确的改写方式应该是添加try/catch


async function transform () {

    loading = true;

    try {

        await promiseA;

        loading = false;

    } catch (e) {

        loading = false;

    }

}

这样就改写成功了。

你可能感兴趣的:(promise 改写async/await的正确方式)