码迷,mamicode.com
首页 > Windows程序 > 详细

Windjs的$await随笔

时间:2015-01-13 14:08:32      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:

  初识Windjs,了解很少,又没有文档和api,只能自己摸爬滚打找到需要的功能模块,每有会意,便随笔一篇。

  $await是Windjs的核心api。具体可check作者老赵博客: 浅谈Jscex的$await语义及异步任务模型

  $await的语义实际上只是“等待该任务结束”,同时:

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

 

假设有三个任务A、B、C,执行时间分别是3000ms,5000ms,0ms。

场景一:并行

  假设三个任务是并行的,互不干涉,分别执行,这里用一般的js即可,Windjs实现如下:(大材小用)

技术分享
 1 var A = eval(Wind.compile("async", function () {
 2   console.log("Start A");
 3   $await(Wind.Async.sleep(3000));
 4   console.log("Finish A");
 5 }));
 6 
 7 var B = eval(Wind.compile("async", function () {
 8     console.log("Start B");
 9     $await(Wind.Async.sleep(5000));
10     console.log("Finish B");
11 }));
12 
13 var C = eval(Wind.compile("async", function () {
14     console.log("Start C");
15     console.log("Finish C");
16 }));
17 
18 A().start();
19 B().start();
20 C().start();
View Code

 

    场景二:串行

       假设三个任务是串行的,A执行完执行B,B执行完才能执行C。一般js可用setTimeout做回调。这时就有点搞了,我们的中心在于函数本身,不想搞乱七八糟的顺序问题。Windjs实现如下:

技术分享
 1 var A = eval(Wind.compile("async", function () {
 2   console.log("Start A");
 3   $await(Wind.Async.sleep(3000));
 4   console.log("Finish A");
 5 }));
 6 
 7 var B = eval(Wind.compile("async", function () {
 8     console.log("Start B");
 9     $await(Wind.Async.sleep(5000));
10     console.log("Finish B");
11 }));
12 
13 var C = eval(Wind.compile("async", function () {
14     console.log("Start C");
15     console.log("Finish C");
16 }));
17 
18 var run = eval(Wind.compile(‘async‘, function() {
19   $await(A());
20   $await(B());
21   $await(C());
22 }));
23 
24 run().start(); 
View Code

  这里$await就相当于将线程挂起了,直到参数的函数运行完线程才继续执行。

 

   场景三:并行+串行(依赖)

    假设任务A和B可以同时进行,而C则依赖于A和B,需要等它们都完成时才能执行。一般js可以把C写在A和B的回调里,保证A和B都执行完的情况下执行callback函数C。只能突出一个烦字...Windjs方式:

技术分享
 1 var A = eval(Wind.compile("async", function () {
 2   console.log("Start A");
 3   $await(Wind.Async.sleep(3000));
 4   console.log("Finish A");
 5 }));
 6 
 7 var B = eval(Wind.compile("async", function () {
 8     console.log("Start B");
 9     $await(Wind.Async.sleep(5000));
10     console.log("Finish B");
11 }));
12 
13 var C = eval(Wind.compile("async", function () {
14     console.log("Start C");
15     console.log("Finish C");
16 }));
17 
18 var run = eval(Wind.compile(‘async‘, function() {
19   $await(Task.whenAll(A(),B()));
20   $await(C());
21 }));
22 
23 run().start(); 
View Code

  暂时Task.whenAll() api报错...

           

  

  

Windjs的$await随笔

标签:

原文地址:http://www.cnblogs.com/zichi/p/4221057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!