【前端冷知识】JS之最佳实践(1)

Programs are meant to be read by humans and only incidentally for computers to execute.

—— Donald Knuth

今天在微信群里看到一个问题:

如何实现一个函数,使得 repeat(() => {console.log('1')}, 5, 2000) 每两秒执行一次打印,总共五次?

这个问题当然不难,使用定时器就可以了,基本上会写JS的同学都能解决这个问题。在ES2017之前,实现方法也有很多,但现在都9102年了,如果是我来实现的话,基本上毫不犹豫写下面的代码:

 
  

function wait(millisecond) {

  return new Promise((resolve) => {

    setTimeout(resolve, millisecond);

  });

}


async function repeat(task, count = 1, millisecond = 0) {

  while(count--) {

    await wait(millisecond);

    task();

  }

}

为什么这样写呢?因为这个代码结构极其简单,while循环基本上学过程序开发的新手都能理解,只要再了解一下async/await的语义(实际上猜都能猜到),就能彻底明白代码的含义:

 
  

while(count--) {

    await wait(millisecond);

    task();

  }

循环count次,每次wait若干毫秒,这个代码逻辑简单到不需要任何注释。

使用也非常方便,因为它自身是async的函数,返回promise,所以如果我们需要等待执行完成后执行其他任务,只需要放到async function中并加上await:

 
  

(async function() {

  await repeat(taskA, 5, 2000);

  taskB();

 }());

反之,如果我们希望任务同步执行,只需要去掉await。

 
  

repeat(taskA, 5, 2000);

taskB();

如果我们希望A、B都重复若干次,且A、B先后依次执行:

 
  

await repeat(taskA, 5, 2000);

await repeat(taskB, 5, 2000);

如果我们希望A、B都重复若干次,且并行执行:

 
  

await Promise.all([repeat(taskA, 5, 2000), repeat(taskB, 5, 2000)])

如果我们希望taskA、taskB也可以是异步方法,可以稍微修改一下repeat实现:

 
  

async function repeat(task, count = 1, millisecond = 0) {

  while(count--) {

    await wait(millisecond);

    await task();

  }

}

总之,代码是给人阅读的,在ES2017之后,JavaScript支持了async function,请大家在处理异步操作时,使用async function,这样能够写出简洁的,让人非常容易阅读和理解的代码来。

关于async/await的最佳实践,大家还有什么想法,欢迎在issue中讨论。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本
### 回答1: 前端程序员年终个人工作不足之处可能有很多,具体取决于个人情况。 常见问题包括: - 缺乏专业知识,如 web 标准和最佳实践。 - 缺乏团队协作能力。 - 缺少代码组织和管理经验。 - 技术技能偏弱,如 JavaScript、HTML、CSS。 - 缺乏跨浏览器兼容性知识。 - 缺少用户体验和可用性方面的知识。 - 缺少项目管理和需求分析能力 - 没有足够的自我学习能力 这只是一些典型示例,对于每个个人而言,自己不足之处可能有所不同。 ### 回答2: 作为前端程序员,在年终个人工作中可能存在以下不足之处: 第一,技术水平有待提升。前端行业发展迅速,新的技术和工具不断涌现。作为前端程序员,需要不断学习和掌握新的技术,提高自己的专业能力和竞争力。如果在年终个人工作中没有展现出具备应对新技术的能力,可能会被视为技术停滞或滞后。 第二,沟通能力不足。前端开发往往需要和设计师、后端程序员以及产品经理进行良好的沟通和协作。如果在年终个人工作中没有展现出良好的沟通能力,不仅会影响项目的进度和效果,也会影响整个团队的工作效率和氛围。 第三,代码质量有待改进。前端程序员编写的代码需要具备可读性、可维护性和可扩展性。如果在年终个人工作中没有展现出写出高质量代码的能力,可能会导致项目的bug较多、维护困难等问题,影响整体的工作效果。 第四,项目管理能力不足。前端工作往往涉及多个项目和任务的管理。如果在年终个人工作中没有展现出良好的项目管理能力,无法按时完成任务,缺乏时间和资源的分配能力,可能会影响项目的进度和质量。 总结起来,前端程序员在年终个人工作中的不足主要体现在技术水平、沟通能力、代码质量和项目管理能力等方面。需要不断学习和提高自身的能力,以适应行业的发展需求,提升个人的工作表现。 ### 回答3: 作为前端程序员,在年终个人工作中可能会有一些不足之处。首先,技术方面可能存在一些欠缺,比如对某些新技术或框架的不熟悉,导致无法在项目中应用,或者对一些基础的技术没有深入的理解。这可能导致无法快速解决问题或者提升开发效率。 其次,可能会有一些沟通方面的不足。与其他团队成员的沟通不畅,无法很好地理解需求,导致开发出来的产品与预期不符。此外,对于一些技术问题的解释可能不够清晰,无法准确地传达给其他非技术人员。 另外,对于工作进度的把控也可能存在不足。有时在面对紧迫的项目时,可能无法合理规划时间,导致工作延期或者质量下降。同时,对于一些琐碎的任务,可能存在一定的拖延和忽视,影响整体工作效率。 此外,由于前端开发是一个快速变化的领域,需要不断学习和跟进最新的技术发展。如果对于学习计划的安排不够合理,可能会导致知识更新的滞后,无法跟上行业的步伐。 最后,对于自我评估和反思的能力也可能有所不足。在年终个人工作总结中,可能没有对自己的不足和问题进行深入的剖析,缺乏提升自身能力的明确目标。 总而言之,作为前端程序员,在年终个人工作中可能存在技术、沟通、工作进度、学习能力和自我评估等方面的不足之处,需要不断反思和提升自身的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值