zoukankan      html  css  js  c++  java
  • Promise

    Promise 对象用于延迟(deferred) 计算和异步(asynchronous ) 计算。 一个 Promise 对象代表着一个还未完成,但预期将来会完成的操作。

    API

    • Promise.all(iterable)
      • 返回一个promise对象,当iterable参数里所有的promise都被解决后,该promise也会被解决。
    • Promise.race(iterable)
      • 当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。
    • Promise.reject(reason)
      • 调用Promise的rejected句柄,并返回这个Promise对象。
    • Promise.resolve(value)
      • 将现有对象转为Promise对象。
    • Promise.prototype.then(onFulfilled, onRejected)
      • 添加正常和异常的回调到当前 promise 对象的函数.
    • Promise.prototype.catch(onRejected)
      • 添加一个否定(rejection) 回调到当前 promise, 返回一个新的promise。如果这个回调被调用,新 promise 将以它的返回值来resolve,否则如果当前promise 进入fulfilled状态,则以当前promise的肯定结果作为新promise的肯定结果.

    Examples

    下面代码执行后打印结果的先后顺序 会因为 Math.random 产生的随机数而受影响

    'use strict';
    var testPromise = (function(){
        var count = 1;
        return function(order){
            //定义一个 Promise 对象
            var pi = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    resolve(count++);
                }, Math.round(Math.random() * 100) + 1000);
            });
            //添加一个 Resolved 函数
            pi.then(function (reslut) {
                console.log(order ," -- " ,reslut);
            });
        };
    })();
    testPromise("A");
    testPromise("B");
    testPromise("C");

    Promise.all

    处理一个或多个 promise 集合

    'use strict';
    var testPromise = (function(){
        var count = 1;
        return function(){
            var promises = [1,2,3,4,5].map(function (id) {
                return new Promise(function (resolve,reject) {
                    setTimeout(function () {
                       resolve(count++);
                    }, Math.round(Math.random() * 100) + 1000);
                });
            });
            Promise.all(promises).then(function (reslut) {
                console.log("success : ",reslut);
            }).catch(function(reslut){
                console.log("error : ",reslut);
            });
        };
    })();
    testPromise();
    需要注意事先好的 5 个 Promise 不能出现异常, 其中任意一个出现异常,
    Promise 的状态都将为 catch 需要处理 error
    

    Promise.resolve

    将现有对象转为 Promise 对象

    'use strict';
    test.json : {
        "test" : "test"
    }
    var pi = Promise.resolve($.get('test.json'));
    pi.then(function (reslut) {
        console.log("success : ",reslut);
    },function(error){
        console.log("error : ",error);
    });

    Promise.reject

    将现有对象转为 Promise 对象, 与 Promise.resolve 差不多, 只监听异常 个人觉得这个功能能用上的场景很少

    'use strict';
    var pi = Promise.reject($.get('test.json'));
    // 第一个 Resolved 不用写, 不会执行
    pi.then(null,function(error){
        console.log("error : ",error);
    });

    Promise.race

    同 Promise.all 一样接收一个数组,不同的是只要该数组中的任意一个 Promise 对象的状态发生变化 ( 无论是 resolve 还是 reject ) 该方法都会返回。

    'use strict';
    var testPromise = (function(){
        var count = 1;
        return function(){
            var promises = [1,2,3,4,5].map(function (id) {
                return new Promise(function (resolve,reject) {
                    setTimeout(function () {
                       resolve(count++);
                    }, Math.round(Math.random() * 100) + 1000);
                });
            });
            Promise.race(promises).then(function (reslut) {
                console.log("success : ",reslut);
            }).catch(function(reslut){
                console.log("error : ",reslut);
            });
        };
    })();
    testPromise();
  • 相关阅读:
    蓝牙模块连接后出现ANR,日志记录
    移动基站问题
    从地址栏获取字符串
    jquery升级换代
    手机屏幕的触点
    屏幕翻转后要干什么
    条件判断后吸住底部的总结
    mouseenter 和 mouseleave
    自动垂直居中的js
    数学方法代替浮动解决自动换行排列
  • 原文地址:https://www.cnblogs.com/cmyoung/p/6040815.html
Copyright © 2011-2022 走看看