美文网首页
ES6 Promise 异步2

ES6 Promise 异步2

作者: 崩鲨卡拉卡 | 来源:发表于2019-03-18 14:41 被阅读0次

概念:

  • 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);
})
读取失败.png

相关文章

  • 【ECMAScript6】 Promise

    Promise 是什么 Promise 是 ES6 为 JavaScript 异步编程定义的全新 api 。为异步...

  • ES6 Promise 异步编程方案

    为什么使用 Promise ? Promise 是 ES6 提出的异步编程方案 ! ES6 之前,如果我们都是通过...

  • Promise介绍及jQuery deferred详解

    Promise介绍 Promise 是 JavaScript 的异步操作解决方案,是ES6提出的异步操作解决方案之...

  • 2020-03-14 vue-promise一些简单记录

    promise ES6特性,用来解决异步回调问题。

  • React学习笔记(9)Promise

    阮一峰ES6 Promise Promise定义 Promise 是异步编程的一种解决方案,所谓Promise,简...

  • JavaScript Promise的用法

    Promise是JavaScript ES6中的一个新特性,用于异步处理。在没有Promise之前,做异步调用通常...

  • 10. 回调和promise

    异步加载 JSES5 ES6 promise 学习视频记录

  • js sleep

    // promise 在ES6的语法中,Promise是sleep方法异步的实现一种方式,借助Promise方法可...

  • 2017.8.18

    1.为vue项目添加了网站ico 2.继续学习ES6,巩固异步函数async,promise

  • Promise

    es6中有个特别的对象Promise,今天我们就来学习它,了解它。 Promise含义 Promise 是异步编程...

网友评论

      本文标题:ES6 Promise 异步2

      本文链接:https://www.haomeiwen.com/subject/yolvmqtx.html