ES6 Promise 异步2

概念:

  • Promise 是一个构造函数,既然是构造函数,就可以 new promise()一个 promise 实例
  • Promise 内置 reslovereject 两个函数,分别是 成功的回调失败的回调函数
  • 在 Promise 的 Prototype 属性上,有个 .then 方法,只要是Promise 的实例,都可以调用 .then方法
  • Promise 是一个异步操作,new 出的实例也是异步操作,异步操作只有两种结果:
    状态1:成功:在内部调用成功的回调函数 reslove,将成功结果返回给调用者
    状态2:失败:在内部调用失败的回调函数 reject,将失败返回给调用者
  • 我们可以在实例上,调用.then()方法,【预先】为Promise指定,成功、失败的回调函数

使用:

这里写了一个简单的 读取txt内容的demo:
  • 第一步:在内存中存入 read() 函数
  • 第二步:程序往下走 调用 read('./read.txt'),进入read()函数体内
  • 第三部:定义并且新new Promise实例对象,瞬间返回了 promise对象 给 p
  • 第四步:执行p.then(),传入成功失败 的回调的操作代码
  • 第五步:Promise得到(reslove,reject)两个函数参数,执行 Promise 内部的函数,
// 使用 Promise 方法阅读一个txt 文件
const fs=require('fs')
function read(fpath){
   var promise=new Promise(function(reslove,reject){
      //此处 reslove 和 reject 是形参
      fs.readFile(fpath,'utf-8',(err,datastr)=>{
         if(err) return reject(err);
         reslove(datastr);
      })
   })
   return promise;
}

//传入 seslove 和 reject 的方法
var p=read('./read.txt');
p.then((result) => {
   console.log(result);
}).catch((err) => {
   console.log(err);
});
上代码可以简化:
function read(fpath){
   return promise=new Promise(function(reslove,reject){
      //此处 reslove 和 reject 是形参
      fs.readFile(fpath,'utf-8',(err,datastr)=>{
         if(err) return reject(err);
         reslove(datastr);
      })
   })
}

//传入 seslove 和 reject 的方法
read('./read.txt').then((result) => {
   console.log(result);
}).catch((err) => {
   console.log(err);
});

使用 Promise 来解决回调地狱的问题:

// 使用 Promise 方法阅读一个txt 文件
const fs=require('fs')

function read(fpath){
   return promise=new Promise(function(reslove,reject){
      //此处 reslove 和 reject 是形参
      fs.readFile(fpath,'utf-8',(err,datastr)=>{
         if(err) return reject(err);
         reslove(datastr);
      })
   })
}

//传入 seslove 和 reject 的方法
read('./read.txt')
.then((result) => {
   console.log(result);
   
   //读取文件1
   return read('./read.1.txt')
})
.then((result)=>{
   console.log(result);

   // 读取文件2
   return  read('./read.2.txt')
})
.then((result)=>{
   console.log(result);
})

捕获异常的方式:

我们有两种处理异常的方式:

  • 第一:前面promise执行失败,不影响后面执行,我们单独为每个promise 指定,失败的回调函数
  • 第二:如果promise 执行失败,立即停止后续执行,在程序尾部, 添加.catch(){func(erro)}
  • 第一种方式很简不举例,直接第二种,也是最常见
//传入 seslove 和 reject 的方法
read('./read.txt')
.then((result) => {
   console.log(result);
   return read('./read.1.txt')
})
.then((result)=>{
   console.log(result);

   // 读取文件2
   return  read('./read.22.txt')
})
.then((result)=>{
   console.log(result);
})
.catch((err)=>{
   console.log('读取失败拉'+err.message);
})
ES6 Promise 异步2_第1张图片
读取失败.png

你可能感兴趣的:(ES6 Promise 异步2)