Node.js 异步编程
程序员文章站
2022-07-01 12:03:26
...
Node.js 异步编程
一. 异步编程的好处
1.异步编程不像同步编程,它不需要等待上一步的代码执行完之后再执行,而是先把异步代码存储在一个异步存储区,等待同步代码完成之后,在来执行异步代码。
1.1异步编程有很多特有的代码设计模式,为了实现同样的功能,使用同步方式和异步方式编写代码会有很大差异,新手在刚接触是会很难理解
1.2函数返回值
使用一个函数的输出作为另一个函数的输入是常见的需求,在同步方式下一般以下述方式编写代码:var p1=f1(f2('input'))
在异步方式下,由于函数执行结果不是通过返回值,而是通过回调函数传递,因此一般按以下方式编写代码:fn2('input', function(demo1) { fn1(output2, function(demo2) { }); });
这种方式就是一个函数套一个函数,层级变多了,就很麻烦
2.异步编程的几种方式
回调函数
最原始的写法,会产生回调地狱,代码易读性差且混乱:
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
我们可以es6 中的方法来解决回调函数的情况:
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));
这样就解决了回调地狱的问题,不过建议封装到函数里
上一篇: 反着读的短信
下一篇: 股市跌跌不休,动物们都不淡定了