标签:
初识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();
场景二:串行
假设三个任务是串行的,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();
这里$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();
暂时Task.whenAll() api报错...
标签:
原文地址:http://www.cnblogs.com/zichi/p/4221057.html