异步流程控制浅谈

bash脚本语言,基本上每个命令都是需要不定时等待的,所以是一种天然的异步流程控制语言

“我们要寻找的就是如何组织我们的代码,来让其更加容易,极少冗余的表述我们的思维过程,同时这个过程本身又是容易被不断延展的,我称之为编织代码。”

表面同步,内在异步的模型,才是高并发编程和高效率编程的最终方案

概念

流程
由两个及以上的业务步骤,完成一个完整的业务行为的过程,可称之为流程;注意是两个及以上的业务步骤
简言之流程就是过程节点及执行方式有序组成的过程。

异步
异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送

线程
线程是进程中某个单一顺序的控制流。也被称为轻量进程(lightweight processes).计算机科学术语,指运行中的程序的调度单位
当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者

流程控制
在声明式的编程语言中,流程控制指令是指会改变程序运行顺序的指令,可能是运行不同位置的指令,或是在二段(或多段)程序中选择一个运行。

目的:规定程序执行的顺序

流程控制可分为三类:

  • 第一个是顺序执行。这个非常简单,就是先执行第一行再执行第二行……这样依次从上往下执行。
  • 第二个是选择执行。也就是说,有些代码可以跳过不执行,有选择地执行某些代码。
  • 第三个是循环执行。也就是说,有些代码会反复执行。

代码

定义一个异步的加法函数

// 使用promise
function asyncAdd(a, b) {
   
  return new Promise((resolve, reject) => {
   
    if (typeof a !== 'number' || typeof b !== 'number') {
   
      return reject('arguments type wrong!')
    }
    setTimeout(() => {
   
      resolve(a + b)
    }, 50)
  })
}
// 使用callback
function callbackAdd(a, b, cb) {
   
  if (typeof cb !== 'function') {
   
    throw new Error('arguments:cb must be function')
  }
  if (typeof a !== 'number' || typeof b !== 'number') {
   
    return cb('arguments type wrong!')
  }

  setTimeout(() => {
   
    cb(null, a + b)
  }, 50)
}

要求:使用asyncAdd方法,执行从1…100的循环操作

方案0:传统的callback语法

console.time('callback 100')
callbackAdd(1, 2, (err, result) => {
   
  if (err) {
   
    throw new Error(err
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值