zoukankan      html  css  js  c++  java
  • Javascript Promise 学习笔记

    1.     定义:Promise是抽象异步处理对象以及对其进行各种操作的组件,它把异步处理对象异步处理规则采用统一的接口进行规范化。

     

    2.     ES6 Promises 标准中定义的API

    a)  Constructor:采用new来实例化,
    var promise = new Promise(function(resolve, reject) {…});

    b)  Instance Method:使用then方法设置成功(resolve)失败(reject)时的回调函数,     

           promise.then(onFulfilled, onRejected)

    promise.catch(onRejected)其中,catch只是then的别名而已;

    c)  Static Method:一些其他的辅助方法,比如all()resolve()

     

    3.     Promise 状态。三种状态:Pending(初始化)FulfilledRejected。在then后执行的函数可以肯定地说只会被调用一次。

    promise对象被 resolve 时的处理 onFulfilled

    promise对象被 reject 时的处理 onRejected

    image

    1. Promise调用的执行过程

     

    4.     Resolve方法:

    a)  静态方法Promise.resolve(value)可以认为是new Promise()方法的快捷方式,是一种语法糖;Promise.reject(error)与之类似;

    b)  Promise.resolve方法另一个作用就是将thenable对象转换为promise对象,比如jQuery.ajax()

     

    5.     Promise在规范上规定Promise只能使用异步调用方式 。所以,promise.then实际上是属于异步调用的。

     

    6.     Promise方法链Promise可以将任意个方法连在一起作为一个方法链(method chain)。例如:

    .then(taskA).then(taskB).catch(onRejected).then(finalTask);

    方法链将方法串在一起,按照顺序严格执行。

    * 注意,ECMAScript 3catch是保留字,因此在IE8一下不能使用,所以,一般使用promise["catch"]或者then来代替之。

    imageimage

    2. Promise链式调用的执行过程

     

    7.     每次调用then都会返回一个新创建的promise对象,应该尽量避免一个promise执行多个then方法,而是使用链式调用法。

     

    8.    Promise和数组:Promise.all([…])在所有promise对象都变为 FulFilled Rejected 状态之后被调用。Promise对象数组中所有promise方法同时调用。

    Promise.race为任意一个方法变为 FulFilled Rejected 状态之后被调用,在第一个promise对象变为Fulfilled之后,并不会取消其他promise对象的执行。

     

    9.     Promise中的    then catch

    a)  使用promise.then(onFulfilled, onRejected) 的话,在 onFulfilled 中发生异常的话,在 onRejected 中是捕获不到这个异常的。

    b)  promise.then(onFulfilled).catch(onRejected) 的情况下,then 中产生的异常能在 .catch 中捕获

    c)  .then .catch 在本质上是没有区别的,需要分场合使用。

     

    10.   Deferred拥有 PromiseDeferredPromise并不是处于竞争的关系,而是Deferred内涵了Promise。使用Deferred,只需要先创建deferred对象,可以在任何时机对 resolvereject 方法进行调用。
        var deferred = new Deferred();

     

    本文摘自JavaScript Promise迷你书(中文版)

  • 相关阅读:
    python3.4+pyspider爬58同城(二)
    pyspider安装后,点击run,报pyhton has stop working或python已停止运行的错误
    PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'C:\Users\video\AppData\Local\Temp\tmpfipzk8ma'--问题解决
    使用firefoxprofile,selenium设置firefox,初始化firefox
    排序算法讲解
    Java寫聊天小程序
    csproj项目工程文件的脚本/动态链接库设置
    常见的内存加密防破解及安全方案
    Animator直接引用FBX下的AnimClip与直接引用单独的AnimClip的对比
    Jupyter多内核的手动配置(Python多版本)
  • 原文地址:https://www.cnblogs.com/pengchen/p/5419412.html
Copyright © 2011-2022 走看看