异步回调函数缺点:
嵌套层次很深,难以维护
无法正常使用return 和 throw
无法正常检索堆栈信息
多个回调之间难以建立联系
在多个回调之间难以建立联系
嵌套层次很深
无法正常使用return和throw
无法正常检索堆栈信息
异步回调的问题
”回调地狱“
更深层次的问题:假设需求
遍历目录,找出最大的一个文件。
回调有四个问题:
嵌套层级很深,难以维护。
无法正常使用return和throw
无法正常检索堆栈信息
多个回调之间难以建立联系
回调的四个问题
回调四个问题
回调四个问题
嵌套层次很,难以维护
无法正常使用 return 和 throw
无法正常检索堆栈信息
多个回调之间难以建立联系
异步回调函数是一个新的栈,所以当前栈无法获取之前栈的信息的.之前的栈也无法捕获当前栈的信息,异步回调函数没法使用try catch,因为调用函数和回调函数不是一个栈
回调四个问题
嵌套层次很,难以维护
无法正常使用 return 和 throw
无法正常检索堆栈信息
多个回调之间难以建立联系
回调地狱图例
回调有四个问题:
嵌套层次很深,难以维护;
无法正常使用return和throw
无法正常检索堆栈信息
多个回调之间难以建立联系
回调有四个问题:
嵌套层次很深,难以维护;
无法正常使用return和throw
无法正常检索堆栈信息
多个回调之间难以建立联系
以及多个回调之间难易建立联系;
异步回调函数是一个新的栈,所以当前栈无法获取之前栈的信息的.之前的栈也无法捕获当前栈的信息;
回调的四个问题2
回调的四个问题
异步回调函数与前面的函数不处于同一个栈,所以不适用try catch 等上层检查机制。
全局变量的污染问题。
“回调地域”:嵌套层次很深,难以维护
无法正常使用return 和throw
无法正常检索堆栈信息
多个回调之间难以建立联系
异步回调函数会在一个新的栈中运行
回调函数四个问题:
嵌套层次很深
无法正常使用return 和throw
无法正常检索堆栈信息
多个回调函数之间难以建立联系
比如 var a=xxx.方法(参数,function(a,b){
var xxx=xxx; 全局变量
function(){xxxxxxx}
// 这里 可以跳出 这个 回调 在对数据作处理 就不会出现 数据脏问题
})
容易进入回调地狱 难以维护
异步函数 和回调函数 不在一个栈里 异步函数不能监听到 回调抛出的try 问题 所以只能return callback 而嵌套太深 无法正确return
一个异步函数 的回调函数可能会在里面生成一个全局变量 做操作 ,如果异步函数做的操作过多,可能会导致全局变量变脏
再多个回调之间难以建立联系
在异步回调的操作当中,我们没有办法正常的去使用try,catch
不在一个栈里,所以需要使用return将错误返回。
一、代码示例
function findLargest(dir, callback) {
fs.readdir(dir, function(err, files) {
if(err) return callback(err);
})
}1、findLargest和fs.readdir属于不同的栈,执行到fs.readdir时,findLargest先出栈。
(2)异步的问题
①因为异步回调函数会在新的栈中运行,所以这个栈中无法获取之前的栈的信息。之前的栈也无法捕获这个栈中的错误。所以异步回调开发中,无法用try...catch。
②无法判断异步文件什么时候完成,所以得在高级作用域链交给内层作用域,可能会被其他函数访问和修改,最终出现错误。
3、异步回调的4个问题
(1)嵌套层很深,难以维护。
(2)无法正常使用return 和throw。
(3)无法正常检索堆栈信息。
(4)多个对调之间难以建立联系。
回调函数四个问题:
嵌套层次很深
无法正常使用return 和throw
无法正常检索堆栈信息
多个回调函数之间难以建立联系
q前后两个函数不处在一个栈中所以用try...catch没有任何意义!