异步编程优势和难点
优势
非阻塞IO模型,可以使CPU与IO并不相互依赖等待,让资源得到更好的利用
难点
异常处理
异步方法通常在第一个阶段提交请求后立刻返回,但异常不一定发生在这个阶段,对于 callback执行时抛出的异常将无能为力
改进
将异常作为回调函数第一个实参传回,如果为空值,则表明异步调用没有异常抛出
async(function(err, results){
//TODO
});
//正确捕获
try{
req.body = JSON.parse(buf, option.reviver);
} catch(err) {
err.body = buf;
err.status = 400;
return callback(err);
}
callback()
函数嵌套过深
阻塞代码
问题:sleep(1000)持续占用CPU进行判断,破坏了事件循环的调度
改进:使用setTimeout(),setInterval()
多线程编程
问题:没有充分利用CPU
改进:借助Web Workers