如何将数组元素动态映射为async异步或sync同步函数?
结论
你第一种尝试的写法本身不符合JS语法规则,无法直接运行实现需求。
原因说明
async是JS定义异步函数的静态语法修饰符,必须在代码解析阶段就明确写在函数定义前,不能通过运行时的表达式动态拼接生成。你写的[isAsync ? 'async' : ''] () => {}会被JS引擎识别为:先创建一个包含字符串的数组,再尝试调用这个数组对象,自然会抛出类型错误(数组不是可调用对象)。
优化实现(避免重复书写函数逻辑)
如果你觉得现有实现重复写了两次函数体,可以把公共逻辑抽出来,简化成下面的写法:
routes.map(({ isAsync }, index) => { // 公共逻辑只写一次 const commonLogic = () => { console.log('isAsync: ', isAsync, index) } return isAsync ? async () => commonLogic() : commonLogic })
内容的提问来源于stack exchange,提问作者Mike K
相关产品推荐
相关产品推荐

