Electronic Joint Business

Solution for E-Business

winjs

在 Javascript 中用 Promise 进行异步编程

对 Javascript 这类单线程的语言来说,避免同步执行对创建能即时响应高效执行的应用来说是十分必要的。Windows Library for Javascript (即 WinJS) 提供了一种称为 promise 的机制,大大简化了异步编程。

JavaScript 用异步编程的必然
JavaScript 是单线程的语言。这意味着调用耗时的过程时,其他所有过程的执行会被阻塞,直到该过程结束。假设有个类库用于查询某个 web service,我们这样来调用:

var result = myWebService.get("http://www.contoso.com");

在结果返回前的这段时间,其所在环境内的所有执行都被暂停了。这意味着UI界面失去了响应,动画效果暂停了,应用中的其他代码也无法被执行。

解决这个问题的方法是尽可能的避免同步执行。通常我们会遵循一些基本的模式。这些模式可以归纳外将某项功能的执行推迟到未来某个时点。基于什么样的模式取决于使用何种 API。例如,处理 HTML DOM 的时候,大多数的元素都有一些事件。订阅这些事件允许以异步的形式执行代码。假如上面的 web service 库遵循这样的模式,代码看起来是这样的:

myWebService.addEventListener(‘completed’, function(result) { /* do something */});
myWebService.get("http://www.contoso.com");

现在在这段 javascript 里调用 get 方法就不会阻塞执行了。(这里假定从 Web Service 获得结果的实际工作发生在 Javascript runtime 之外)。实际上,这儿只是初始化了该工作,当它结束时,“结束”事件被触发,处理器函数则被调用。当你有多个函数需要在费时操作结束时才被运行时,这个模式就十分有用。

>>> 阅读全文

 

, , , ,