javascript中的异步编程
我有一个javascript中的异步编程,javascript,asynchronous,Javascript,Asynchronous,我有一个load()函数,里面我想调用一个函数,比如download(),它下载一个xml文件。下载完成后,我必须调用函数sayparseXML(),解析下载的xml文件。解析完成后,我必须调用另一个函数,比如processParsedXMLFile()。您能指导我如何以最简单的方式实现这一点吗?您可以使用回调 load(params , function(){ download(params, function(){ parseXML(params, function(){
load()
函数,里面我想调用一个函数,比如download()
,它下载一个xml文件。下载完成后,我必须调用函数sayparseXML()
,解析下载的xml文件。解析完成后,我必须调用另一个函数,比如processParsedXMLFile()
。您能指导我如何以最简单的方式实现这一点吗?您可以使用回调
load(params , function(){
download(params, function(){
parseXML(params, function(){
processParsedXMLFile(params, function(){
...
})
})
})
})
JavaScript中异步代码有两种常见的方法——回调和承诺 有很多帖子都在讨论回调,并给出了一个很好的例子和详细的解释 对于承诺:和是阅读承诺的好起点,现在用JavaScript编写异步代码更为常见 根据脚本的运行位置,您可能需要包含包/库以支持承诺:
- NodeJS-安装相应的包(,…)
- WinJS-承诺本机支持。信息和指南,也有很多问题,所以涵盖不同的方面,如
- 对于常规浏览器,使用jQuery的实现是常见的做法-[]jQuery.promise]()。随着ES6兼容浏览器的广泛使用,您将不需要额外的库-
我还要补充一点,回调通常接受结果的一个参数,或者有时接受两个参数(error和result),或者有时有两个回调(一个用于error,一个用于success)。底线-阅读异步函数的文档并注意回调的签名。另外,请注意,通常IO方法是异步的(例如下载资源或等待用户事件),但“进程”和“解析”方法通常是同步的。再次-阅读您正在使用的函数的文档。回答得很好。哦,等等,现在是2015年。我不认为向一个显然不了解异步JavaScript的人解释承诺会那么容易。@Maroun我认为承诺比回调更容易解释。
download()。然后(parseXML)。然后(processParsedXMLFile)。是否包括任何图书馆?可能不取决于你的环境。你认为最简单的是什么?
download()
.then(function(data){/* parse XML here */})
.then(function(data){/* process parsed XML*/ });