Nodejs 异步编程|优点难点

300 阅读1分钟

异步编程优势和难点

优势

非阻塞IO模型,可以使CPU与IO并不相互依赖等待,让资源得到更好的利用

image.jpeg

难点

异常处理

异步方法通常在第一个阶段提交请求后立刻返回,但异常不一定发生在这个阶段,对于 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()
函数嵌套过深

image.jpeg

阻塞代码

问题:sleep(1000)持续占用CPU进行判断,破坏了事件循环的调度
改进:使用setTimeout(),setInterval()

多线程编程

问题:没有充分利用CPU
改进:借助Web Workers

异步转同步