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,如需转载请自行联系原作者

相关文章
visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】
这篇文章提供了Visual Studio 2022社区版C#环境的搭建和安装使用指南,包括下载、安装步骤和创建C#窗体应用程序的详细图文解析。
visual studio 2022 社区版 c# 环境搭建及安装使用【图文解析-小白版】
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
917 2
|
存储 API C++
【 QString接口大全】 Qt QString类使用示例
【 QString接口大全】 Qt QString类使用示例
682 1
|
存储 Android开发 索引
【Android FFMPEG 开发】FFMPEG 获取 AVStream 音视频流 ( AVFormatContext 结构体 | 获取音视频流信息 | 获取音视频流个数 | 获取音视频流 )
【Android FFMPEG 开发】FFMPEG 获取 AVStream 音视频流 ( AVFormatContext 结构体 | 获取音视频流信息 | 获取音视频流个数 | 获取音视频流 )
414 0
|
4天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
|
6天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
819 12
|
2天前
|
云安全 安全
免费+限量+领云小宝周边!「阿里云2026云上安全健康体检」火热进行中!
诚邀您进行年度自检,发现潜在风险,守护云上业务连续稳健运行
1162 1
|
5天前
|
消息中间件 人工智能 Kubernetes
阿里云云原生应用平台岗位急招,加入我们,打造 AI 最强基础设施
云原生应用平台作为中国最大云计算公司的基石,现全面转向 AI,打造 AI 时代最强基础设施。寻找热爱技术、具备工程极致追求的架构师、极客与算法专家,共同重构计算、定义未来。杭州、北京、深圳、上海热招中,让我们一起在云端,重构 AI 的未来。
|
4天前
|
人工智能 JavaScript 前端开发
【2026最新最全】一篇文章带你学会Cursor编程工具
本文介绍了Cursor的下载安装、账号注册、汉化设置、核心模式(Agent、Plan、Debug、Ask)及高阶功能,如@引用、@Doc文档库、@Browser自动化和Rules规则配置,助力开发者高效使用AI编程工具。
646 4