Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的异步编程_Javascript_Asynchronous - Fatal编程技术网

javascript中的异步编程

javascript中的异步编程,javascript,asynchronous,Javascript,Asynchronous,我有一个load()函数,里面我想调用一个函数,比如download(),它下载一个xml文件。下载完成后,我必须调用函数sayparseXML(),解析下载的xml文件。解析完成后,我必须调用另一个函数,比如processParsedXMLFile()。您能指导我如何以最简单的方式实现这一点吗?您可以使用回调 load(params , function(){ download(params, function(){ parseXML(params, function(){

我有一个
load()
函数,里面我想调用一个函数,比如
download()
,它下载一个xml文件。下载完成后,我必须调用函数say
parseXML()
,解析下载的xml文件。解析完成后,我必须调用另一个函数,比如
processParsedXMLFile()
。您能指导我如何以最简单的方式实现这一点吗?

您可以使用回调

load(params , function(){
  download(params, function(){
      parseXML(params, function(){
        processParsedXMLFile(params, function(){
           ...
        })
      })
   })
})

JavaScript中异步代码有两种常见的方法——回调和承诺

有很多帖子都在讨论回调,并给出了一个很好的例子和详细的解释

对于承诺:和是阅读承诺的好起点,现在用JavaScript编写异步代码更为常见

根据脚本的运行位置,您可能需要包含包/库以支持承诺:

  • NodeJS-安装相应的包(,…)
  • WinJS-承诺本机支持。信息和指南,也有很多问题,所以涵盖不同的方面,如
  • 对于常规浏览器,使用jQuery的实现是常见的做法-[]jQuery.promise]()。随着ES6兼容浏览器的广泛使用,您将不需要额外的库-
With Promission如下所示(假设每个调用都返回在操作完成时实现的承诺):


我还要补充一点,回调通常接受结果的一个参数,或者有时接受两个参数(error和result),或者有时有两个回调(一个用于error,一个用于success)。底线-阅读异步函数的文档并注意回调的签名。另外,请注意,通常IO方法是异步的(例如下载资源或等待用户事件),但“进程”和“解析”方法通常是同步的。再次-阅读您正在使用的函数的文档。回答得很好。哦,等等,现在是2015年。我不认为向一个显然不了解异步JavaScript的人解释承诺会那么容易。@Maroun我认为承诺比回调更容易解释。
download()。然后(parseXML)。然后(processParsedXMLFile)。是否包括任何图书馆?可能不取决于你的环境。你认为最简单的是什么?
download()
   .then(function(data){/* parse XML here */})
   .then(function(data){/* process parsed XML*/ });