• 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();
  • 相关阅读:
    第一次团队作业——团队展示
    TAC队--团队选题报告
    TAC 坦克队
    Leetcode题库——16.最接近的三数之和
    Leetcode题库——11.盛最多水的容器
    Leetcode题库——23.合并k个排序链表
    Leetcode题库——4.寻找两个有序数组的中位数
    Leetcode题库——15.三数之和
    Leetcode题库——12.整数转罗马数字
    Leetcode题库——19.删除链表的倒数第 n 个节点【##】
  • 原文地址:https://www.cnblogs.com/ericblog1992/p/13086920.html
Copyright © 2020-2023  润新知