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)
    });
  • 相关阅读:
    利用Flask中的werkzeug.security模块加密
    logging
    python后端架构(转)
    访问一个网页的全过程
    微服务优缺点
    HTTP协议通信原理 与常见报错信息
    SSH与ansible 部署方法与核心模块简介
    linux 普通用户批量创建账户与密码
    三次握手与4次挥手简单说明
    sed 命令简介
  • 原文地址:https://www.cnblogs.com/xushan03/p/11962574.html
Copyright © 2011-2022 走看看