关于回调函数和回调函数常出现的问题

所谓回调函数,就是把任务的第二段单独写在一个函数里边,等到从新执行这个任务的时候,就直接调用这个函数。异步

fs.readFile('某文件', function (err, data) {
  if (err) throw err;
  console.log(data);
});

这是一个错误优先的回调函数(error-first callbacks),这也是Node.js自己的特色之一async

回调常见的问题:函数

1.异常处理ui

try{
  //TODO
}catch(e){
  //TODO
}

异步代码时try catch再也不生效spa

let async = function(callback){
  try{
    setTimeout(function(){
      callback();
    },1000)
  }catch(e){
    console.log('捕获错误',e);
  }
}

async(function(){
  console.log(t);
});

由于这个回调函数被存放起来了,直到下一个事件循环的时候才会取出,try只能捕获当前循环内的异常面对callback异步无能为力。code

Node在处理异常有一个约定,将异常做为回调的第一个实参传回,若是为空表示没有出错。blog

async(function(err,callback){
  if(err){
    console.log(err);
  }
});

异步方法也要遵循两个原则:事件

  • 必需要在异步以后调用传入的回调函数
  • 若是出错了要向回调函数传入异常供调用者判断
let async = function(callback){
try{
  setTimeout(function(){
    if(success)
      callback(null);
    else
      callback('错误');
  },1000)
}catch(e){
  console.log('捕获错误',e);
}
}

2.回调地域回调函数

异步多级依赖的状况下嵌套的很是深,代码难以阅读和维护io

let fs = require('fs');
fs.readFile('template.txt','utf8',function(err,template){
fs.readFile('data.txt','utf8',function(err,data){
  console.log(template+' '+data);
})
})
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息