zoukankan      html  css  js  c++  java
  • WindJS 中的$await

    因为在看win8时看到Promises的异步模式。kinfey让我们去摸下WindJS(就是之前的Jscex),WindJS的具体操作会在之后总结,可先看看文档http://windjs.org/cn/docs/

    看WinJS时接触到$await,从其作者--老赵的博客中可找到其描述。Check:浅谈Jscex的$await语义及异步任务模型

    简单小结:

    $await的语义:

    • 如果该任务没有运行,则启动该任务。
    • 如果该任务已经完成,则立即返回结果(或抛出异常)。

    例子:假如有三个任务:A和B可以并行,但C依赖前两者。即A B并行,2个都完成之后到C,实现:

    function (taskA, taskB, taskC) {
        taskA.start();
        taskB.start();
    
        $await(taskA);
        $await(taskB);
    
        $await(taskC);
    }

    任务A和B的start方法会在调用后立即返回,并在两者都完成后,才会启动并等待C任务。

    也可以这么做:

    function (taskA, taskB, taskC) {
        $await(Jscex.Async.parallel(taskA, taskB));
        $await(taskC);
    }

    Jscex.Async.parallel是一个辅助函数,接受一堆异步任务,并返回一个新的异步任务,执行它表示并行地执行这些子任务,它也会在子任务都完成后才结束。

    例2:C依赖于B,但A与前两者都独立。

    function (taskA, taskB, taskC) {
        taskA.start();
    
        $await(taskB.continueWith(taskC));
        $await(taskA);
    }

    在JavaScript中,我们只要为Jscex.Async.Task对象扩展一个continueWith方法,表示taskC将于taskB之后执行,并作为一个新任务返回即可。

    其实这里的思想就是WinJS 中的Promises的then了。

    最后,还支持赋值操作。

           hello.world = $await(...);

     

    从这里我们可以感受到WindJS是十分强大的,他让异步便得那么“符合逻辑”,那么简单。

     

    补充:$await只能直接用在eval(Jscex.compile())里面,不然会报无定义,不能识别的错误。https://github.com/JeffreyZhao/wind/issues/50

     

  • 相关阅读:
    win7下的nginx小demo
    破解navicat
    MVC下用C#实现Excel导出
    使用IE10登录,URL出现SessionId的解决办法
    C#错误:The Controls collection cannot be modified
    更改数据库排序规则
    windows server 2008 r2电脑历史操作记录
    jquery easyui无法绑定下拉框内容
    Jquery实现自动提示下拉框
    CLSID {91493441-5A91-11CF-8700-00AA0060263B}错误
  • 原文地址:https://www.cnblogs.com/mybkn/p/2707691.html
Copyright © 2011-2022 走看看