• js学习笔记 -- Promise


    Promise

    new Promise( function(resolve, reject) {...} /* executor */  );

    executor是带有 resolve 和 reject 两个参数的函数 ,promise构造函数执行的时候执行executor,resolve被调用promise状态改为fullilled,reject被调用状态改为rejected。
    executor抛出exception,promise状态改为rejected,返回值被忽略。

    简单例子

    let res = function (x) {
        console.log("resolve"+x)
    }
    let rej = function (x) {
        console.log("reject"+x)
    }
    let a = function (res,rej) {
        var x = Date.now()
        if(x%2===0){
            res(x)//双数执行resolve,Promise状态改为resolve
        }else{
            rej(x)//单数执行reject,Promise状态改为reject
        }
    }
    new Promise(a).then(res,rej)

    链式调用

    function add(input) {
        return new Promise(function (res,rej) {
            if(Date.now()%2===0){
                throw 123
            }
            console.log('add'+input+input)
            setTimeout(res,500,input+input)
            console.log('over')
        })
    }
    add(1).then(add).then(add).then(add).then(add)
        .catch(function () {
        console.log('error')
    })//串行执行,任何任务失败则不再继续并执行错误处理函数。
        .finally(function () {
        console.log('all over')
    })//finally始终执行

    Promise.resolve/reject

    function a() {
        return Promise.resolve('xxx')//返回一个状态未fullfilled的promise对象,括号中为传入resolve的参数
    }
    a().then(function (b) {
        alert(b)
    })
    
    
    function a() {
        return Promise.reject('rrrr')//返回一个状态未rejected的promise对象,括号中为传入reject的参数
    }
    a().catch(function (b) {
        alert(b)
    })

    Promise.race/all

    var p1 = new Promise(function (resolve, reject) {
        console.log(1)
        setTimeout(resolve, 500, 'P1');
    });
    var p2 = new Promise(function (resolve, reject) {
        console.log(2)
        setTimeout(resolve, 600, 'P2');
    });
    // 同时执行p1和p2,并在它们都完成后执行then:
    Promise.all([p1, p2]).then(function (results) {
        console.log(results); // 获得一个Array: ['P1', 'P2']
    });
    
    var p1 = new Promise(function (resolve, reject) {
        setTimeout(resolve, 500, 'P1');
    });
    var p2 = new Promise(function (resolve, reject) {
        setTimeout(resolve, 600, 'P2');
    });
    Promise.race([p1, p2]).then(function (result) {
        console.log(result); // 'P1'
    });//将获得结果'P1'。p2仍在继续执行,但执行结果将被丢弃。
  • 相关阅读:
    error和exception有什么区别?
    运行时异常与一般异常有何异同?
    由c++循环中局部变量地址不变而引发的思考
    Navicat连接Mysql数据库报错,但是命令行可以连接上
    git reset --hard HEAD^后显示more?的解决方案
    java基础易错、难理解、易混淆知识点复习
    More than one file was found with OS independent path 'assets/ap1.data'
    UML类图中方法(操作)的表示格式
    正则匹配以xx开头以xx结尾的单词
    运行PL/SQL时只输出anonymous block completed
  • 原文地址:https://www.cnblogs.com/liuboyuan/p/9761786.html
Copyright © 2020-2023  润新知