这里写自定义目录标题
node.js异步编程
脑图
案例代码
一、NodeJS最大的特点–事件机制和异步
异步编程有很多特有的代码设计模式,为了实现同样的功能,使用同步方式和异步方式编写代码会有很大差异,新手在刚接触是会很难理解
1、函数返回值
使用一个函数的输出作为另一个函数的输入是常见的需求,在同步方式下一般以下述方式编写代码:
var p1 = fn1(fn2('input'));
在异步方式下,由于函数执行结果不是通过返回值,而是通过回调函数传递,因此一般按以下方式编写代码:
fn2('input', function(demo1) {
fn1(output2, function(demo2) {
});
});
异步编程的几种方式
回调函数
最原始的写法,会产生回调地狱,代码易读性差:
let fs = require('fs');
fs.readFile('./a.txt', (err, data) => {
if(err){
console.log('readFile.error:', err);
}else{
fs.readFile('./b.txt', (err1, data1) => {
if(err1){
console.log('readFile.error:', err1);
}else{
return data + data1;
}
})
}
})
Promise
我们可以将上述的回调函数方式包装成 Promise 如下:
let readFile = path => {
return new Promise(function(resolve, reject){
fs.readFile(path, (err, data) => {
if(err){
reject(err);
}else{
resolve(data);
}
})
});
}
//然后使用 readFile 函数实现如下:
readFile('./a.txt')
.then(data => readFile('./b.txt').then(data1 => data + data1))
.catch(err => console.log('readFile.error:', err));
这样既可解决掉这个问题但是.then()也会出现很多 建议大家讲这些分装到一个函数里面