我有以下代码:
if (isFlyoutAnimationDisabled) {
flyOut();
} else {
setTimeout(flyOut, 250);
}
似乎应该有比在每个if
条件下调用flyOut更好的模式。似乎浪费了我并污染了代码。
有更好的方法吗?
答案 0 :(得分:2)
如果你可以使用promises,条件很简单:
function delay(t) {
return new Promise(resolve => setTimeout(resolve, t));
}
async function example() {
if (!isFlyoutAnimationDisabled)
await delay(250);
flyOut();
}
// or without async/await:
function example() {
return (isFlyoutAnimationDisabled
? Promise.resolve()
: delay(250)
).then(flyOut);
}
答案 1 :(得分:1)
超级可读
if (isFlyoutAnimationDisabled) {
flyOut();
} else {
setTimeout(flyOut, 250);
}
使用三元运算符?:
setTimeout(flyOut, isFlyoutAnimationDisabled ? 0 : 250);
但使用上述内容时,您应该考虑将setTimeout(fn, 0)
作为“nextTick”执行,以显示这种看似意外的结果
fn = () => console.log("A");
setTimeout(fn, 0) // "A"
console.log("B"); // "B"
// See console!
答案 2 :(得分:1)
使用三元运算符,例如:
isFlyoutAnimationDisabled ? flyOut() : setTimeout(flyOut, 250);
答案 3 :(得分:1)
async function foo() {
const delay = isFlyoutAnimationDisabled ? 0 : 250;
await new Promise(x => setTimeout(x, delay));
flyOut();
}
字面上不需要if-else
。此处使用Promise
,并避免concurrency
问题。灵感来自@ Bergi的答案。