如何创建Javascript函数调用列表,在调用下一个函数之前等待上一个函数完成?

如何创建Javascript函数调用列表,在调用下一个函数之前等待上一个函数完成?,javascript,jquery,Javascript,Jquery,我目前正在建立一个招牌系统,以一致的格式显示各个地点的时间表信息 其思想是,每个位置都有自己的轻量级页面,其中包含少量变量,这些变量定义特定于位置的参数,然后依次从单个外部.js文件调用相应的函数 我的页面可以很好地使用显式链接在一起的函数,如下所示: function one (){ //do the thing two(); } function two (){ //do the next thing three(

我目前正在建立一个招牌系统,以一致的格式显示各个地点的时间表信息

其思想是,每个位置都有自己的轻量级页面,其中包含少量变量,这些变量定义特定于位置的参数,然后依次从单个外部.js文件调用相应的函数

我的页面可以很好地使用显式链接在一起的函数,如下所示:

function one (){        
    //do the thing
    two();      
}

function two (){        
    //do the next thing
    three();        
}

function three (){      
    //do the last thing
}   
我想做的是将函数分开,这样我就可以从每个页面的列表中调用它们,这样我就可以根据需要在不同的位置替换某些函数的不同版本。大概是这样的:

function callList(){     
  one();
  //wait for one to finish  
  two();
  //wait for two to finish 
  three();
}
我花了很多时间阅读异步函数、回调、承诺等方面的内容,但提供的解决方案似乎更多地是将函数显式链接在一起,并传递单个变量作为函数完成的证明,例如以下(编写良好的)示例:

我在找出正确的解决方案时遇到的部分困难是,我的功能在用途上有很大差异。我的许多函数根本不产生变量,而产生变量的函数(除了一个ajax调用)会产生大量的全局参数集,这些参数不需要显式地传递给下一个函数。事实上,大多数人关注以各种方式呈现和操作svg和文本,并且由于显示的数据的性质,许多人严重依赖循环

与我遇到的大多数javascript问题一样,我确信这只是我理解上的一个差距,但我觉得我只是在一遍又一遍地阅读相同的文章,却一无所获。我真的需要一个更有知识的人给我一个正确的方向

谢谢。

使用等待 或

使用承诺

您需要函数1执行完成处理程序将执行下一个函数 或

使用承诺


您需要function1 execution complete handler将执行下一个

函数是Javascript中的一级公民,所以您可以将它们放入数组中,然后循环调用它们

var functionsToCall = [
    one,
    two,
    three
];

// Call them (use your looping method of choice)
for (var i = 0; i < functionsToCall.Length; i++) {
    functionsToCall[i]();
}
如果需要对函数调用进行更精细的控制,可以将自定义对象放入数组中,而不仅仅是函数本身,并基于此更改行为

例如:

var functionsToCall = [
    { func: one, isAsync: true },
    { func: two, isAsync: false }
];

不管怎样,只是一些可能性。这将真正取决于你的具体情况需要什么

函数在Javascript中是一流的公民,因此您可以将它们放入数组中,然后循环调用它们

var functionsToCall = [
    one,
    two,
    three
];

// Call them (use your looping method of choice)
for (var i = 0; i < functionsToCall.Length; i++) {
    functionsToCall[i]();
}
如果需要对函数调用进行更精细的控制,可以将自定义对象放入数组中,而不仅仅是函数本身,并基于此更改行为

例如:

var functionsToCall = [
    { func: one, isAsync: true },
    { func: two, isAsync: false }
];

不管怎样,只是一些可能性。这将真正取决于你的具体情况需要什么

你的函数是什么以及它们返回什么都很重要。如果它们不是异步的,您不必担心,它们将按顺序运行。但如果它们是异步的,您需要它们返回承诺或接受回调,因此我们需要更多地了解它们的行为。如果您的函数可以返回承诺,那么async/await是一种非常方便的实现方法。@MarkMeyer好的,所以我一定是误解了什么是异步函数。我只有一个函数(我的ajax调用)是这样明确定义的。因此,尽管循环很重,其他函数仍然应该是同步的?是的,javascript基本上是单线程的,因此循环和常规函数调用都是按顺序发生的。像网络请求和计时器这样的东西是异步的,所以它们需要特殊处理。@MarkMeyer这就是我需要的提示,谢谢。你的函数是什么,它们返回什么都很重要。如果它们不是异步的,您不必担心,它们将按顺序运行。但如果它们是异步的,您需要它们返回承诺或接受回调,因此我们需要更多地了解它们的行为。如果您的函数可以返回承诺,那么async/await是一种非常方便的实现方法。@MarkMeyer好的,所以我一定是误解了什么是异步函数。我只有一个函数(我的ajax调用)是这样明确定义的。因此,尽管循环很重,其他函数仍然应该是同步的?是的,javascript基本上是单线程的,因此循环和常规函数调用都是按顺序发生的。像网络请求和计时器这样的东西是异步的,所以它们需要特殊的处理。@MarkMeyer这就是我需要的提示,谢谢。