如何重写或扩展 javascript wait 以添加额外的行为? [已关闭]

问题描述 投票:0回答:1

每次我在代码中使用

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
之后的任何类型的操作,而不仅仅是获取。

javascript async-await promise
1个回答
2
投票

创建一个接受

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

抛出的任何异常
© www.soinside.com 2019 - 2024. All rights reserved.