如果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;
}
}
这样就改写成功了。