zoukankan      html  css  js  c++  java
  • WinJS Promise简介 metro

    Promise承诺是一个对象。
    对承诺对象上最常用方法是 then,
    该方法接受三个参数:
    一个是在承诺成功完成后调用的函数,
    一个是在承诺完成但出错后调用的函数,
    一个是提供进度信息的函数。
    在 Windows 运行时和 Windows JavaScript 库中,你还可以使用 done 函数,该函数接受相同的参数。
    区别在于,如果处理时出错,
    then 函数会在错误状态下返回一个承诺,但不引发异常,
    而 done 方法会在未提供错误函数的情况下引发异常。

    总结:

    正常Promise:调用then的onComplete即then的第一个函数参数。

    异常Promise:调用then的onError即then的第二个函数参数。

       对于promise可以使用.then().then().then()...执行链,它们顺序执行,没有异常的情况下,依次执行then的第一个函数参数即onComplete函数。

    如果有一个链发生异常,则返回一个异常的Promise往下传递,直到遇到有onError函数参数的then后,则将异常信息传递给onError处理,

    然后返回一个正常的Promise,直到执行链执行完毕。

      在异常发生到异常被处理期间,Promise不会调用onComplete函数参数的,直到处理了异常后才会正常调用。

    -----------------

    Promise:

    1.延迟执行某个任务
    WinJS.Promise.timeout(5000).
                then(function () {
                    that.output("\r\n\r\n\r\n The promise is fullfilled after 5 seconds \n");
                });
                


    2.返回一个异常Promise
    WinJS.Promise.wrapError("Exception thrown inside a promise")
                .then(function () {
                    console.log("complete 1");
                  }, function () {
                    console.log("error1");
                }).then(function () {
                    console.log("complete 2");
                  }, function () {
                    console.log("error2");
                }).then(function () {
                    console.log("complete 3");
                  }, function (e) {  
                    console.log("error3");
                });
    Promise then执行链按顺序执行。
    如果有一个链抛出异常则返回一个Error Promise,直到某个then处理了该错误,才返回正常的Promise
    输出结果
    error1
    complete2
    complete3
    如果第一个和第二个then的错误处理函数没有,则输出为
    error3


    3.将一个非异步函数包装为异步任务,返回一个Promise
    WinJS.Promise.as(nonPromiseAdd(num1, num2));

    function nonPromiseAdd(num1, num2) {
        return num1 + num2;
    }
    Promise.as将一个非异步函数包装为异步函数


    4.WinJS.Promise 对象的 cancel()方法将异步任务取消。并引发error回掉


    5.汇总多个Promise的结果,所有promise执行完毕后,则调用汇总。
    WinJS.Promise.join(p).
                then(function () {
                    console.log("finally promise after 3 seconds");
                }, function () {
                    console.log("finally promise after 3 seconds error");
                });
    p为promise数组,等数组中的所有promise执行完毕后执行。


    6.汇总多个promise的结果,有一个promise执行完毕,则调用汇总。
    WinJS.Promise.any(p).
                    then(function () {
                        console.log(" promise invoked");
                    });
    p为promise数组,数组中有一个promise执行完毕则执行

  • 相关阅读:
    BZOJ-2431: [HAOI2009]逆序对数列 (傻逼递推)
    BZOJ3695 滑行
    BZOJ3689 异或之
    BZOJ3696 化合物
    BZOJ1393 [Ceoi2008]knights
    BZOJ2280 [Poi2011]Plot
    BZOJ1570 [JSOI2008]Blue Mary的旅行
    BZOJ2751 [HAOI2012]容易题(easy)
    BZOJ2818 Gcd
    BZOJ2426 [HAOI2010]工厂选址
  • 原文地址:https://www.cnblogs.com/beenupper/p/2852173.html
Copyright © 2011-2022 走看看