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执行完毕则执行

原文地址:https://www.cnblogs.com/beenupper/p/2852173.html