NodeJS -- 异步编程

一、NodeJS最大的特点–事件机制和异步
(1)、异步编程有很多特有的代码设计模式,为了实现同样的功能,使用同步方式和异步方式编写代码会有很大差异,新手在刚接触是会很难理解
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()也会出现很多 建议大家讲这些分装到一个函数里面

你可能感兴趣的:(node.js)