zoukankan      html  css  js  c++  java
  • Promise 知识点

    • .done()
      Promise 对象的回调链,不管以then方法或catch方法结尾,要是最后一个方法抛出错误,都有可能无法捕捉到(因为 Promise 内部的错误不会冒泡到全局)。因此,我们可以提供一个done方法,总是处于回调链的尾端,保证抛出任何可能出现的错误。

    • promise 理解:

    1. 在程序中,只要返回了一个 promise 对象,如果 promise 对象不是 Rejected 或 Fulfilled 状态,then 方法就会继续调用。利用这个特性,可以处理多个异步逻辑。
    2. promise 的状态改变为 rejected 后,promise 就会跳过后面的 then 方法。也就是,某个 then 里面发生异常后,就会跳过 then 方法,直接执行 catch。
      出处:https://github.com/nodejh/nodejh.github.io/issues/23
    • Promise 的链式调用。也就是 promise().then().then().catch() 的形式

    • Promise 新建后就会立即执行。

    • Promise.resolve方法可以将现有对象转为Promise对象。

    • Promise.done方法,总是处于回调链的尾端,保证向全局抛出任何可能出现的错误。
      解决的问题:
      Promise对象的回调链,不管以then方法或catch方法结尾,要是最后一个方法抛出错误,都有可能无法捕捉到(因为Promise内部的错误不会冒泡到全局)。

    • 如果没有报错,则会跳过catch方法。

    • catch方法返回的还是一个 Promise 对象,因此后面还可以接着调用then方法。
      catch方法后面then方法里面报错,就与前面的catch无关了。

    • catch方法之中,还能再抛出错误。
      可以再写一个catch来处理catch方法中抛出的错误。

    • Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。

    • 跟传统的try/catch代码块不同的是,如果没有使用catch方法指定错误处理的回调函数,Promise 对象抛出的错误不会传递到外层代码,即不会有任何反应。
      这就是说,Promise 内部的错误不会影响到 Promise 外部的代码,通俗的说法就是“Promise 会吃掉错误”。

    • Promise.finally方法用于指定不管Promise对象最后状态如何,都会执行的操作。
      它与done方法的最大区别,它接受一个普通的回调函数作为参数,该函数不管怎样都必须执行。

    • 不知道或者不想区分,函数是同步函数还是异步函数,但是想用 Promise 来处理它,这时候就要用 Promise.try 方法。

    • 使用 Promise.try() 的好处:

    1. 让同步函数同步执行,异步函数异步执行
    2. 更好地管理异常
    • 如果Promise状态已经变成resolved,再抛出错误是无效的。

    • then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。

    • promise.then(): 第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。

    promise.then()、promise.catch()、Promise.all()、、、

    Promise 构造函数接受一个函数作为参数,该函数的2个参数分别是 resolve 和 reject。他们是2个函数,有 JavaScript 引擎提供,不用自己部署。

    var promise = new Promise ( function ( resolve, reject) {
        if ( /* 异步操作成功 */ ) {
            resolve (value)
        } else {
            reject (error)             
        }
    })
    

    如果调用 resolve 函数和 reject 函数时带有参数,那么这些参数会被传递给回调函数。

    Promise 实例生成以后,可以用 then 方法分别指定 Resolved 状态和 Rejected 状态的回调函数(then 方法的作用是为 Promise 实例添加状态改变时的回调函数)。

    promise.then( function (value) {
        // success
    }, function (value) {
        // failure
    })
    

    Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个 catch 语句捕获。注意:因此无法知道错误是哪个Promise产生的,除非设置了不一样的错误提示。

    一般,不要在 then 方法中定义 Rejected 状态的回调函数(即 then 的第二个参数),而应该总是使用 catch。

    如果没有使用 catch 方法指定错误处理的回调函数,Promise 对象抛出的错误不会传递到外层代码,即不会有任何反应。

    catch 方法返回的还是一个 Promise 对象,因此还可以接着调用 then 方法。

    如果没有报错,则会跳过 catch 方法,继续执行后面的 then 方法(如果后面还有 then 方法的话)。

    getJson ('/post/1.json').then ( function (post) {
        return getJson(post.commentURL)
    }).then ( function (comments) {
        // some code 
    }).catch ( function (error) {
        // 处理前面3个 Promise 产生的错误
    })
     var p = Promise.all([p1, p2, p3])
    

    p的状态有 p1、p2、p3 决定,分成2种情况:

    1. 只有 p1、p2、p3 的状态都变成 Fulfilled,p 的状态才会变成 Fulfilled,此时 p1、p2、p3 的返回值组成一个数组,传递给 p 的回调函数。

    2. 只要 p1、p2、p3 中有一个被 Rejected,p 的状态就变成 Rejected,此时第一个被 Rejected 的实例的返回值会传递给 p 的回调函数。

  • 相关阅读:
    从一个整数数组中取出最大的整数,最小整数,总和,平均值
    9、数组知识点小结
    结构类型小结
    枚举类型小结
    asp.net MVC 笔记
    Android自动化测试之Shell脚本一——模拟触屏事件
    Android性能优化案例研究
    ViewHolder模式的简洁写法
    genymotion ddms查看data等文件目录
    Android事件传递机制
  • 原文地址:https://www.cnblogs.com/cag2050/p/7543635.html
Copyright © 2011-2022 走看看