每次我在代码中使用
await
时,我都希望出现一个加载屏幕。总是这样写真让人厌烦:
this.startLoading();
await fetch(//do something);
this.stopLoading();
或
this.startLoading();
await lastValueFrom(this.http.get<Array<MiningRigDevice>>('/mining/devices')).then(res => this.miningRigDevices = res);
this.stopLoading();
我怎样才能将await的行为重写为类似的行为
loadingDivOn()
await(some operation)
loadingDivOff()
注意,这必须处理
await
之后的任何类型的操作,而不仅仅是获取。
创建一个接受
Promise
作为参数的函数,并将您的 Promise 传递到该函数中
async function promiseWrapper(apromise) {
try {
this.loadingDivOn();
return await apromise;
} finally {
this.loadingDivOff();
}
}
let fetchresponse = await promiseWrapper(fetch(...));
let delresponse = await promiseWrapper(this.http.delete(...));
使用
try ... finally
可以保证 this.loadingDivOff()
将始终被调用,无论 apromise
是解决还是拒绝。但是 catch
中没有 promiseWrapper
块将会传递 apromise
抛出的任何异常