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

  • 相关阅读:
    VS2008开发的MFC程序,静态连接的方法
    [delphi]参数带有默认值的函数
    __cplusplus的用处
    去掉输入法上的CH和EN
    Linux下Socket的简单使用及最简化封装
    VS2008 _CRT_SECURE_NO_WARNINGS 的问题
    VC:对话框中菜单的使用(WM_INITMENUPOPUP)
    VC:CFindReplaceDialog(非模态对话框、IsWindow()、m_fr、GetFindString())
    献给初学编程者
    VC:状态栏(AfxGetMainWnd()、GetDescendantWindow()、SetPaneInfo()、SetPaneText())
  • 原文地址:https://www.cnblogs.com/beenupper/p/2852173.html
Copyright © 2020-2023  润新知