zoukankan      html  css  js  c++  java
  • Promise的用法

    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 的回调函数。 

     
     
  • 相关阅读:
    linux 之文网络编程基础 (二)、大小端、地址地址转换函数
    linux 之文网络编程基础 (一)、网络编程基本概念
    Linux下静态库与动态库简单制作与使用
    linux 之文件基础 (五)、文件属性
    C++ pair
    Ice 线程与并发 C++
    linux 之文件基础 (四)、标准IO的API
    linux 之文件基础 (三)、标准IO的两个概念:流、缓冲区
    linux 之文件基础 (二)、文件IO API
    linux 之线程基础 (三)、多线程编程的同步和互斥
  • 原文地址:https://www.cnblogs.com/cina33blogs/p/7250141.html
Copyright © 2011-2022 走看看