【发布时间】:2021-08-28 05:49:26
【问题描述】:
我已经迷上了使用 Promise 的 async/await 语法,因为它看起来和行为都像同步代码。
虽然我看到大多数带有命名函数的 async/await 示例,但我发现我现在总是在 IIFE 中编写 async/await 代码,因为无论如何它只是语法糖,就像这样:
btnInOrderElem.onclick = () => {
(async () => {
contentElem.innerHTML = '';
loaderAreaElem.style.display = 'inline';
addLi(await loader.getData());
addLi(await loader.getData());
addLi(await loader.getData());
loaderAreaElem.style.display = 'none';
})();
}
这种做法有什么我遗漏的吗?在某些时候这样做有缺点吗?是否有任何理由创建命名函数来运行 async/await 代码?
【问题讨论】:
-
我看到的唯一问题是您没有使用 addEventListener。 ;) 这是对最佳实践的个人意见。
-
你为什么不直接传递一个异步回调呢? (并使用 addEventListener ;))我打赌你不会将同步函数调用为包装好的 IIFE
const log = () => {(()=>console.log('IIFE?'))();} -
@epascarello 如果需要,我会使用 addEventListener,例如如果我必须通过
{ once: true },但如果不是,我发现onclick语法更简洁且更易于阅读。 -
您是否有理由使用 IIFE 而不是
btnInOrderElem.onclick = async () => { ... }? -
@EdwardTanguay 我不确定我是否理解正确。对于
btnInOrderElem.onclick = async () => { ... },括号内的代码 (...) 仅在用户每次单击按钮时执行。如果我没记错的话,这应该和你的例子一样
标签: javascript async-await es6-promise