如何解决数组内的异步Fat Arrow的意外行为
编辑:无法再复制该行为,但是这在节点v14.7.0中发生。一切恢复正常,我可以传递一个普通的回调() => <AsyncFunction>()
,并且可以正常工作...也许我正在使用的调试环境出了点问题,并且没有加载更新的代码,我没有知道。
我认为拥有async () => <function>()
语法会创建一个函数,然后将该函数放入interruptRunner
的数组中,而是立即执行并因此在数组中添加了promise。
我很困惑为什么它不应该执行。在返回类型两边加上括号async () => (<function>())
可解决此问题,但我不确定为什么要首先执行它。我认为只有IFFE才能立即执行。
const interruptRunner = async actions => {
for (let action of actions) {
await action();
}
};
// Didn't work,is the solution though
await interruptRunner([
() => sleep(2 * 1000),...
]
// Didn't work,executed like IFFE
return await interruptRunner([
async () => await ticket.origMsg.author.send(msg),async () => await sleep(60 * 1000),...
// Worked,functions were received instead of pending promises
await interruptRunner([
async () => {
await ticket.origMsg.author.send(msg);
},...
// Works,but with not needed asyncs
await interruptRunner([
async () => (await sleep(2 * 1000)),async () => (await sleep(2 * 1000)),]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。