用Promise解决回调地狱~串行执行和Promise.all并发执行

1)串行执行

var fs = require('fs');

// 
var p = new Promise((resolve, reject) => {
    fs.readFile('./ver.json', 'utf-8', function (err, data) {
        resolve(data);
    });
});

// 
var p2 = new Promise((resolve, reject) => {
    setTimeout(function () {
        resolve('\nhello, lua');
    }, 1000);
});

// 
var d1, d2;

// 
function cacl(_d1, _d2) {
    console.log(_d1 + _d2);
}

/**
 * 方法1: 链式执行
 */
p.then(data => {

    // 异步读取到数据1
    d1 = data;

    return p2;
}).then(data2 => {

    // 异步到数据2
    d2 = data2;

    // 
    cacl(d1, d2);
});

/**
结果:
{
        "aaa": "data"
}
hello, lua
 */

2)并行执行

/**
 * Promise.all
 */ 
Promise.all([p, p2]).then(d => {
    console.log(d); 
});

/**
结果:
[ '{\r\n\t"aaa": "data"\r\n}', '\nhello, lua' ]
 */

总结:

根据前后是否有依赖关系,没有依赖关系,则果断引入 Promise.all,有依赖关系,则用async库比较好

 

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