美文网首页
promise 改写async/await的正确方式

promise 改写async/await的正确方式

作者: ashyanSpada | 来源:发表于2020-03-05 00:02 被阅读0次

    如果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的正确方式

          本文链接:https://www.haomeiwen.com/subject/aamglhtx.html