Node异步编程

1.异步操作

  • Node 采用 Chrome V8 引擎处理 JavaScript 脚本,V8 最大特点就是单线程运行,一次只能运行一个任务。
    • Node 大量采用异步操作(asynchronous operation),即任务不是马上执行,而是插在任务队列的尾部,等到前面的任务运行完后再执行
    • 提高代码的响应能力

2.什么是异步

每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

这里推荐阮一峰的Javascript异步编程的4种方法

由于系统永远不知道用户什么时候会输入内容,所以代码不能永远停在一个地方;
Node 中的操作方式就是以异步回调的方式解决无状态的问题;


3.Node中回调函数的设计

对于一个函数如果需要定义回调函数:

  • 回调函数一定作为参数的最后一个参数出现:
    • function foo1(name, age, callback) { }
    • function foo2(value, callback1, callback2) { }
  • 回调函数的第一个参数默认接收错误信息(错误优先的回调函数),第二个参数才是真正的回调数据(便于外界获取调用的错误情况):

注意:上面说到了一个错误优先的回调函数,因为之后的操作大多数都是异步的方式,无法通过 try catch 捕获异常


演示一个自己定义的错误优先的回调函数,判断基数和偶数


/**
 * 异步的回调的方式获取数据
 */
function isOddOrEvenAsync(number, callback) {
  if (number && typeof number === 'number') {
    if (number % 2) {
      callback(null, '奇数');
    } else {
      callback(null, '偶数');
    }
  } else {
    callback(new Error('你传的不是合法参数'));
  }
}

isOddOrEvenAsync(19, function (error, msg) {
  if (error) {
    console.error(error);
    return false;
  }
  console.log(msg);
});

isOddOrEvenAsync(10, function (error, msg) {
  if (error) {
    console.error(error);
    return false;
  }
  console.log(msg);
});

isOddOrEvenAsync(0, function (error, msg) {
  if (error) {
    console.error(error);
    return false;
  }
  console.log(msg);
});

isOddOrEvenAsync('aa', function (error, msg) {
  if (error) {
    console.error(error);
    return false;
  }
  console.log(msg);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值