Electronic Joint Business

Solution for E-Business

在 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 之外)。实际上,这儿只是初始化了该工作,当它结束时,“结束”事件被触发,处理器函数则被调用。当你有多个函数需要在费时操作结束时才被运行时,这个模式就十分有用。 在第二模式的情况下,通常提供的函数是以参数的形式传递给初始化函数。如果假想的 Web Service 库遵循该模式,它看来就是这样的: myWebService.get("http://www.contoso.com", function(result) […]

, , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.