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

 本文转自老Zhan博客园博客,原文链接:http://www.cnblogs.com/mybkn/archive/2012/09/28/2707691.html,如需转载请自行联系原作者

相关文章
|
8月前
|
前端开发 JavaScript
Promise、async和await
Promise、async和await
75 0
|
8月前
|
前端开发 JavaScript
什么是 async、await ?
什么是 async、await ?
|
JSON 前端开发 JavaScript
async/await的应用
async/await的应用
67 0
|
前端开发 JavaScript
|
2月前
|
前端开发 JavaScript 开发者
Async 和 Await 是基于 Promise 实现
【10月更文挑战第30天】Async和Await是基于Promise实现的语法糖,它们通过简洁的语法形式,借助Promise的异步处理机制,为JavaScript开发者提供了一种更优雅、更易于理解和维护的异步编程方式。
34 1
|
2月前
|
JSON 前端开发 JavaScript
浅谈JavaScript中的Promise、Async和Await
【10月更文挑战第30天】Promise、Async和Await是JavaScript中强大的异步编程工具,它们各自具有独特的优势和适用场景,开发者可以根据具体的项目需求和代码风格选择合适的方式来处理异步操作,从而编写出更加高效、可读和易于维护的JavaScript代码。
36 1
|
8月前
|
前端开发 JavaScript 开发者
阿珊带你深入理解 async/await 函数
阿珊带你深入理解 async/await 函数
|
8月前
|
前端开发 JavaScript
async/await
async/await
43 0
|
8月前
|
JSON 前端开发 JavaScript
await
`await` 是 JavaScript 中的一个关键字,它仅在 `async` 函数内部有效。`await` 用于等待一个 `Promise` 对象解析为其完成值或拒绝值。通过使用 `await`,
70 1
|
8月前
|
JSON 前端开发 JavaScript
什么是async和await?
什么是async和await?
67 0