Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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_Jquery_Function - Fatal编程技术网

Javascript 连续调用多个函数

Javascript 连续调用多个函数,javascript,jquery,function,Javascript,Jquery,Function,我知道这个问题已经被问过好几次了,但是我似乎无法用我的代码找到解决方案: 基本上,我想依次调用四个函数: #1 function getJason() { $.getJSON(rgUrl1,function(json1){ rgJson1 = json1; ...etc. }); #2 function combineJason() { //code to combine }); #3 function divideArray() { //code to

我知道这个问题已经被问过好几次了,但是我似乎无法用我的代码找到解决方案:

基本上,我想依次调用四个函数:

#1
function getJason() {
 $.getJSON(rgUrl1,function(json1){
   rgJson1 = json1; ...etc.
 });      


#2
function combineJason() {
  //code to combine 
});


#3
function divideArray() {
  //code to divide stuff 
});


#4
function doOtherStuff() {
  //code to do some other stuff
});
我需要#1在呼叫#2之前完成#2在#3之前完成#3在#4之前完成。过去的帖子让我相信我应该遵守诺言。我已经阅读了文档,并尝试了一些示例,但没有成功:

function testing() {

 var deferredObj = $.Deferred();
 var test = getJson()
 var function1 = function () {

  test.done(function(){

    deferredObj.resolve();

    return deferredObj;
   });

  }

  deferredObj.done(function(){
   combineJson();
 });
}; 

此外,大多数示例处理两个函数,而我需要调用几个函数。我还注意到一些响应包含“setTimeout”。我对使用任何带有计时器、暂停或延迟的东西都有点怀疑,也许是不必要的。那么我就不用猜这个函数需要多长时间了。如果一个用户的计算机/连接速度较慢或其他情况,该怎么办

jQuery的ajax函数已经返回了一个承诺。因此,如果使用jquery的ajax函数,则不需要创建新的延迟对象

要连续调用函数,请调用
。然后调用
方法以获得需要调用的函数数量。如果一个或多个函数需要执行某些异步任务,那么只需返回一个承诺,延迟对象将等待调用下一个
然后
回调,直到返回的承诺得到解决。每个
then
回调都将传递在上一个
then
中返回的数据(或者在返回的情况下是已解析的数据)


连续调用它们非常容易,您不需要等待多个异步操作,只需等待前一个异步操作即可

你会的

function getJason() {
    return $.getJSON(rgUrl1);
}
function combineJason(json1) {
    //code to combine 
}
function divideArray() {
    //code to divide stuff 
}
function doOtherStuff() {
    //code to do some other stuff
}

getJason().then(combineJason).then(divideArray).then(doOtherStuff);
这将非常类似于

doOtherStuff(divideArray(combineJason(getJason())));

只有当一个结果是异步的(在这里,是
getJason
中的
$.getJSON
)时,它才注意延迟计算(作为回调)。

我倾向于使用一些链接WatchJS。。。(查看承诺)。你看过吗?
getJason()
显然是异步的。问自己一个大问题是
combineJason()
divideArray()
doOtherStuff()
是异步的还是同步的?第一:你说得对,使用超时不是一个选项!我发现你的问题有点不清楚应该如何调用这四个函数;输入数据的来源和输出数据的去向。但是,既然您已经提到,您已经研究了延迟,那么让我向您指出文档中的一句话,
“[…]因为deferred.done()返回延迟对象,延迟对象的其他方法可以链接到这一个,包括附加的.done()方法。[…]”“
而不是那篇文章,不过我确实读过,后来还是有些困惑。我尝试将他们的信息和之前帖子中的回复拼凑在一起,但没有成功。你能解释一下,如果第一次调用@NikhilKS需要更多的时间吗?你将第一次回调更改为使用异步操作的回调,setTimeout回调中的返回没有任何意义,因为它不会返回任何内容。重读我答案的第二段。如果您的回调需要执行一些异步操作,并且您需要链等待它完成,那么您需要在该回调中返回一个新的承诺
doOtherStuff(divideArray(combineJason(getJason())));