Promise 解决回调地狱问题

const fs = require('fs');

// fs.readFile('./1.txt', 'utf8', (err, restult1) => {
//     console.log(restult1);
//     fs.readFile('./2.txt', 'utf8', (err, result2) => {
//         console.log(result2);
//         fs.readFile('./3.txt', 'utf8', (err, result3) => {
//             console.log(result3);
//         })
//     })
// });

function p1() {
    return new Promise((resolve, reject) => {
        fs.readFile('./1.txt', 'utf8', (err, result) => {
            resolve(result);
        })
    })
}


function p2() {
    return new Promise((resolve, reject) => {
        fs.readFile('./2.txt', 'utf8', (err, result) => {
            resolve(result);
        })
    })
}


function p3() {
    return new Promise((resolve, reject) => {
        fs.readFile('./3.txt', 'utf8', (err, result) => {
            resolve(result);
        })
    })
}

p1().then((r1) => {
        console.log(r1);
        return p2();
    })
    .then((r2) => {
        console.log(r2);
        return p3();
    }).then((r3) => {
        console.log(r3);
    });
 
 

// 1 在普通函数定义的前面加上 async 关键字 普通函数就变成了异步函数
// 2 异步函数默认的返回值是 promise 对象


// await  关键字
// 1 它只能出现在异步函数中
// 2 await promise 它可以暂停异步函数的执行 等待 promise 对象返回结果后再向下执行
// async function fn() {
//     throw '发生错误';
//     return 123;
// }

// // console.log(fn());
// fn().then(function(data) {
//     console.log(data); // 123 
// }).catch(function(err) {
//     console.log(err);
// })


async function p1() {
    return 'p1';
}

async function p2() {
    return 'p2';
}

async function p3() {
    return 'p3';
}

async function run() {
    let r1 = await p1();
    let r2 = await p2();
    let r3 = await p3();
    console.log(r1);
    console.log(r2);
    console.log(r3);
}
run();
 
 
 
改良以后
const fs = require('fs');
//  promisify 改造现在异步函数 api, 让其返回promise 对象,从而 支持异步函数语法
const promisify = require('util').promisify;
const readFile = promisify(fs.readFile);

async function run() {
    let r1 = await readFile('./1.txt', 'utf8');
    let r2 = await readFile('./2.txt', 'utf8');
    let r3 = await readFile('./3.txt', 'utf8');
    console.log(r1);
    console.log(r2);
    console.log(r3);
}

run();
原文地址:https://www.cnblogs.com/ericblog1992/p/13086920.html