zoukankan      html  css  js  c++  java
  • 回调地狱,Promise解决回调地狱

    1、npm init -y
    2、npm install Promise
    3、readFile是异步函数,因此执行读取a.txt、b.txt、c.txt三个文件顺序不确定
    4、如果想要按照先读取a文件,再读取b文件,再读取c文件顺序
    5、需要层层嵌套,出现回调地狱,也可以使用Promise解决回调地狱
    var fs = require('fs');

    var p1 = new Promise(function (resolve,reject) {
    fs.readFile('./a.txt','utf8',function (err,data) {
    if(err){
    reject(err)
    }
    resolve(data)
    })
    });

    var p2 = new Promise(function (resolve,reject) {
    fs.readFile('./b.txt','utf8',function (err,data) {
    if(err){
    reject(err)
    }
    resolve(data)
    })
    });

    var p3 = new Promise(function (resolve,reject) {
    fs.readFile('./c.txt','utf8',function (err,data) {
    if(err){
    reject(err)
    }
    resolve(data)
    })
    });

    p1
    .then(function (data) {
    console.log(data); //p1的data
    return p2;
    },function (err) { //p1的err
    console.log('读取文件失败了...',err)
    })
    .then(function (data) {
    console.log(data); //p2的data
    return p3;
    },function (err) {
    console.log(err) //p2的err
    })
    .then(function (data) {
    console.log(data); //p3的data
    },function (err) {
    console.log(err) //p3的err
    });


    封装
    var fs = require('fs');

    function pReadFile(dbPath) {
    return new Promise(function (resolve,reject) {
    fs.readFile(dbPath,'utf8',function (err,data) {
    if(err){
    reject(err)
    }else{
    resolve(data)
    }
    })
    })
    }

    pReadFile('./a.txt')
    .then(function (data) {
    console.log(data);
    return pReadFile('./b.txt')
    })
    .then(function (data) {
    console.log(data);
    return pReadFile('./c.txt')
    })
    .then(function (data) {
    console.log(data)
    });
  • 相关阅读:
    Codeforces 735C:Tennis Championship(数学+贪心)
    HDU 5934:Bomb(强连通缩点)
    BZOJ-2743 采花
    BZOJ-1878 HH的项链
    BZOJ-1798 维护序列
    BZOJ-1911 特别行动队
    BZOJ-1010 玩具装箱
    BZOJ-1096 仓库建设
    BZOJ-1012 最大数
    ZOJ 3696 Alien's Organ(泊松定理,期望值)
  • 原文地址:https://www.cnblogs.com/xushan03/p/11962574.html
Copyright © 2011-2022 走看看