美文网首页
Promise笔记

Promise笔记

作者: 李华炎 | 来源:发表于2019-06-18 01:01 被阅读0次

ES6中的Promise

  1. 什么是promise

    promise是异步编程的一种解决方案(比回调函数和事件侦听更强大)

  2. promise有什么作用

    通过promise可以实现异步编程,让程序按照预设的顺序执行(按队列执行)

  3. 如何使用promise

    let promise =  new Promise(function(resolve, reject){
         // 一些耗时操作代码,例如向后台获取数据
         ...
        ...
         if(true){ // 成功
             resolve("成功后需要传递出去的数据");
     }else{ // 失败
             reject("失败后需要传递出去的数据");
     }
    });
    
    promise.then().then()... // 可以链式调用多个then()方法
    

Promise的三个状态

promise的状态一旦发生改变就不会再改变[resolve凝固]

1.Pending [待定]初始化
2.Fulfilled [实现]操作成功
3.Rejected [被否决]操作失败

状态的变化只有两种情况
Pending -> Fulfilled [成功]
Pending -> Rejected [失败]

Promise的then(fulfilled,rejected)函数

  • .then()函数接受两个函数作为参数,分别代表fulfilledrejected
  • .then()函数返回一个新的 Promise实例,所以它可以链式调用

  • 当前面的Promise 状态改变时, .then()会根据最终的状态选择特定的状态响应函数去执行

  • 状态响应函数可以返回新的Promise,或其他值

  • 如果返回新的Promise, 那么下一级.then()会在新 Promise状态改变之后执行

  • 如果返回的是其他任何值,则会立即执行下一级 .then()

// then函数的两个参数
.then(fulfilled => {
    // 成功
}, rejected => {
    // 失败
})

Promise在当前脚本的执行顺序

首先会执行完当前脚本的同步代码,再执行队列中的异步代码(then()函数)

console.log(1);

var promise = new Promise((resolve, reject) => {
    console.log(2);
    resolve(3); // 执行到这异步时,会将任务放到队列中等待执行,此时promise对象还是处于pending状态,直到当前脚步的同步代码执行完毕后,再执行队列中的代码(栈模式)
    
}).then(value => {
    console.log(value);
}, err => {
    console.log(err);
})

console.log(4);
 
// 输出的结果是: 1 2 4 3

Promise异常处理

处理promise错误有两种方式,第一种是将错误交给rejected响应函数,第二种是使用catch()捕获错误并处理。

promise会自动捕获内部异常,并交给rejected响应函数处理,但有多个then()函数时需要在每个then()中都定义rejected处理函数,这样会比较麻烦。建议使用第二种方法(可以一次性处理多个then()的异常错误)

// 使用第二种方法处理异常错误
console.log('go');

new Promise((resolve, reject) => {
    console.log('侦听器函数内部代码被执行!');
    
    // 两秒之后抛出一个错误
    setTimeout(() => {
        resolve('成功返回数据');
    }, 2000);
    
}).then(value => {
    console.log('第一个then:', value);
    
    return new Promise((resolve, reject) =>{
        throw new Error('第一个then抛出一个错误');
    })
}).then(value => {
    // 上一个then抛出错误后,不会执行这里的代码
    console.log('第二个then:', value);

}).catch(error => {
    // catch可以捕获到任何一个then()抛出的错误
    console.log('错误信息:', error);
})

相关文章

  • Promise,async,await笔记

    Promise,async,await笔记 Promise 创建promise对象 Promise对象构造方法传入...

  • promise用法

    Promise笔记 1.promise构造函数 Promise是一个构造函数,传参是一个function(reso...

  • promise

    本文是整理阮一峰大神ES6中 Promise 的学习笔记 目录: Promise.prototype.then()...

  • Promise 笔记

    笔记 1. 构造方法 创建promise对象的流程如下����: new Promise(fn) 返回一个prom...

  • Nodejs Promise 读书笔记

    Nodejs Promise 读书笔记 前言 Promise是抽象异步处理对象以及对其进行各种操作的组件。(Pro...

  • 不深入只浅出ES6 Promise | 笔记

    用例子直观的陈列 Promise 的行为作为笔记(如果能帮助新手快速了解 Promise 的使用自然最好,最终还是...

  • es6 Promise 学习笔记2 链式调用

    es6 Promise 学习笔记1 基础代码解析 这期讲个复杂点的例子 then里的回调返回一个 Promise ...

  • Promise笔记

    Promise学习(上): 资料: JavaScript Promise迷你书 原著:azu / 翻译:liubi...

  • Promise笔记

  • Promise笔记

    Promise的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强...

网友评论

      本文标题:Promise笔记

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