处理相同代码必须立即运行或在承诺解决后运行的情况的最佳方法



根据特定条件x,我需要立即或在解决承诺asyncFunction之后执行重定向:

if (x) {
await asyncFunction();
redirectToA();
}
redirectToA();

不过这真是太难看了。有没有办法简化这个代码,使redirectToA();只出现一次?

我想你可以简单地这样做:

if (x) {
await asyncFunction();
}
redirectToA();

以下示例显示redirectToA()将等待:

async function asyncFunction() {
return new Promise(resolve => {
setTimeout(() => {
resolve()
}, 3000)
})
}
function redirectToA() {
document.getElementById('status').innerText = "Redirected"
}
(async function() {
// your code is here
if (true) {
await asyncFunction()
}
redirectToA()
})()
<p id="status">
Running
</p>

这可能不是问题,但在这两种情况下,我倾向于在nextTick+调用redirectToA()

await (x ? asyncFunction() : Promise.resolve());
redirectToA();

因此,您可以更好地保证一致的重定向行为,并可能从较少的测试中受益。

最新更新