ES6中Promise异步控制对象、nodejs异步处理

5 篇文章 0 订阅
1 篇文章 0 订阅

Promise异步控制对象

使用Promise的原因(以读取文件为例)

  1. 首先👋创建一个文件夹,创建三个txt文件以及一个js文件(我以a.txt、b.txt、c.txt和rfs.js文件为例)

  2. 在a.txt、b.txt、c.txt分别写入文字(建议内容不要过多)

  3. 在rfs.js写入以下代码

    var fs = require('fs');  //引入fs模块
    
    fs.readFile('./a.txt','utf8',function(err,data1){
         console.log(data1);
    })          						//读取a.txt文件内容
    fs.readFile('./b.txt','utf8',function(err,data2){
         console.log(data2);
    })							//读取b.txt文件内容
    fs.readFile('./c.txt','utf8',function(err,data3){
         console.log(data3);
    })							//读取c.txt文件内容
    
  4. 打开终端运行js文件(❓思考)

    • 我们运行之后得出的结果一定是按照a/b/c.txt文件内容顺序吗?(不一定)

    • 如何解决该类现象呢?(回调函数)

      var fs = require('fs');  //引入fs模块
      fs.readFile('./a.txt','utf8',function(err,data1){
              console.log(data1);
              fs.readFile('./b.txt','utf8',function(err,data2){
                  console.log(data2);
                  fs.readFile('./c.txt','utf8',function(err,data3){
                      console.log(data3);
              })
          })
      })   //顺序读取a/b/c.txt文件
      
    • 多层回调进入“回调地狱”如何解决?(Promise)

Promise的使用(EcmaScript 6 中新增的API)

  1. 先读一个文档

    var fs = require('fs');    //引入fs模块
    var p1 = new Promise(function(res,rej){ 
        fs.readFile('./a.txt','utf8',function(err,data){  //读取a.txt文件
            if(err){
                rej(err);
            }else{
                res(data)
            }
        })
    });
    p1.then(function(data){   //调用promise的then方法
        console.log(data);
    },function(err){
        console.log(err);
    })
    
  2. 尝试读取多个文件

    var fs = require('fs') 		 //引入fs模块
    function fun(files){			 //files:传入文件名
        return new Promise(function(succ,err){ //返回对象
            fs.readFile(files,'utf8',function(err,data){
                succ(data)
            })
        })
    }
    //调用promise的then方法
    fun('./a.txt').then(function(data){
        console.log(data);
        return(fun('./b.txt'));
    })
    .then(function(data){
        console.log(data);
        return(fun('./c.txt'))
    })
    .then(function(data){
        console.log(data)
    })
    

Promise原理

promise类似于一个容器,每一次的异步都要创建一个promise容器,每一个异步都要使用一个独立的promise容器进行管理,这一次的异步要么成功要么失败,状态不可逆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值