zoukankan      html  css  js  c++  java
  • 关于回调函数和回调函数常出现的问题

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

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

    这是一个错误优先的回调函数(error-first callbacks),这也是Node.js本身的特点之一

    回调常见的问题:

    1.异常处理

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

    异步代码时try catch不再生效

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

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

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

    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.回调地域

    异步多级依赖的情况下嵌套的非常深,代码难以阅读和维护

    let fs = require('fs');
    fs.readFile('template.txt','utf8',function(err,template){
    fs.readFile('data.txt','utf8',function(err,data){
      console.log(template+' '+data);
    })
    })
  • 相关阅读:
    Rotation Kinematics
    离职 mark
    PnP 问题方程怎么列?
    DSO windowed optimization 代码 (4)
    Adjoint of SE(3)
    IMU 预积分推导
    DSO windowed optimization 代码 (3)
    DSO windowed optimization 代码 (2)
    OKVIS 代码框架
    DSO windowed optimization 代码 (1)
  • 原文地址:https://www.cnblogs.com/Scar007/p/8953365.html
Copyright © 2011-2022 走看看