zoukankan      html  css  js  c++  java
  • ES6-11学习笔记--Promise

    Promise是ES6异步编程解决方案之一,简化以前ajax的嵌套地狱,增加代码可读性。
     
    基本用法:
    resolve,成功
    reject,失败
    let p = new Promise((resolve, reject) => {
        // Promise里面的非异步代码是立刻执行
        console.log(1);
        setTimeout(() => {
            if (true) {
                resolve('成功')
            } else {
                reject('失败')
            }
        })
    })
    console.log(2);
    p.then((res) => {
        console.log(3);
        console.log(res);
    }).catch((e) => {
        console.log(e);
    })
    

      

    Promise的三种状态,三种状态是不可逆的:
    new Promise:pending
    resolve:fulfilled
    reject:rejected
     
    下面代码输出2,永远不会输出1,所以状态不可逆
    let p2 = new Promise((resolve, reject) => {
        reject(2);
        resolve(1);
    })
    p2.then(res => {
        console.log(res);
    }).catch(e => {
        console.log(e);
    })
    

      

    封装一个简易的Promise公用方法:
    function getPromise(url) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(url)
            })
        })
    }
    
    getPromise('a.json')
        .then(res => {
            console.log(res);
            return getPromise('b.json');
        })
        .then(res => {
            console.log(res);
            return getPromise('c.json');
        })
        .then(res => {
            console.log(res);
        })
    

      

     
    Promise静态方法

    Promise.resolve()
    Promise.reject()
    Promise.all()
    Promise.race()
     
    使用all来一次性执行多个Promise
    all方法里面只要有一个Promise失败,那么所有都失败直接进入catch里面
    Promise.all(
        [
            getPromise('1.json'),
            getPromise('2.json'),
            getPromise('3.json')
        ]
    ).then(res => {
        console.log(res); // 所有Promise的res拼接成数组
    })
    

      

    race,比速度
    只要其中一个Promise完成,那么就会认为整个都完成
    只要有一个失败,跟all一样认为所有都失败
    Promise.race(
        [
            getPromise('1.json'),
            getPromise('2.json'),
            getPromise('3.json')
        ]
    ).then(res => {
        console.log(res); // 返回第一个完成的Promise的res
    })
    

      



    放弃安逸,持续努力——成长
  • 相关阅读:
    BestCoder Round #14
    poj 3400 Dropping the stones
    ZOJ1610_Count the Colors(段树/为段更新)
    cxSpreadBook 要么 cxSpreadSheet 设置文本格式
    Chromium Graphics Update in 2014(滑动)
    tomcat加载时报The web application [/dmscs] created a ThreadLocal with key of type
    08-使用for循环输出杨辉三角(循环)
    PHP中遍历stdclass object 及 json 总结[中国航天神舟十号以json形式向地面返回数据]
    MIPI CSI-2规范一——概述及层级
    练习1.16
  • 原文地址:https://www.cnblogs.com/MarsPGY/p/14832686.html
Copyright © 2011-2022 走看看