Javascript 通过一系列功能传递承诺”;“拖尾”;“从”的顶端脱落;然后呢;?

Javascript 通过一系列功能传递承诺”;“拖尾”;“从”的顶端脱落;然后呢;?,javascript,ajax,promise,Javascript,Ajax,Promise,情况如下: 用户按下一个按钮,触发由4个函数组成的事件处理程序。其中一个函数执行一些异步任务,然后进入同步和异步(取决于用例)函数的级联。代码大致如下所示: $('someButton')。单击(函数(){ handler(); }) 异步函数处理程序(){ syncFunction1(); syncFunction2(); 等待异步函数3(); syncFunction4(); } 函数asyncFunction3(){ $.post('someUrl'{ //无需传输 }).然后((jso

情况如下: 用户按下一个按钮,触发由4个函数组成的事件处理程序。其中一个函数执行一些异步任务,然后进入同步和异步(取决于用例)函数的级联。代码大致如下所示:

$('someButton')。单击(函数(){
handler();
})
异步函数处理程序(){
syncFunction1();
syncFunction2();
等待异步函数3();
syncFunction4();
}
函数asyncFunction3(){
$.post('someUrl'{
//无需传输
}).然后((jsonString)=>{
parseJSONtoObject(jsonString)
})
}
函数parseJSONtoObject(数据){
//一些转换代码
callcascadeoff函数();
}
函数callcascadeoff函数(){
//一些调用其他函数的代码
//哪些函数调用其他函数
//等等
//下面是“callCascadeOfFunctions()”功能的一些示例:
//一些代码
步骤1();
}
函数级联步骤1(){
if(X){
步骤2a
}否则{
步骤2b
}
} 
//这种情况持续下去,有时级联分裂,有时不分裂。
//在某种程度上,我们有另一个AJAX,就像这样
函数级联n(){
//一些代码
用ajax等待消息
//一些代码,深入到只有同步
//操作发生
}
}
  • cascadeStep1
    需要从
    cascadeStep2A
    cascadeStep2B
    返回结果。由于所有这些都是
    async
    函数,它们将返回一个承诺
  • callcascadeoff函数
    需要返回
    casecadeStep1的结果
基本上,一旦您使用
async
函数或使用承诺“做事情”的函数,它们都需要返回一个承诺。只要每件事都返回一个承诺,并在其内部操作完成时得到解决,
wait
就可以正常工作。

  • cascadeStep1
    需要从
    cascadeStep2A
    cascadeStep2B
    返回结果。由于所有这些都是
    async
    函数,它们将返回一个承诺
  • callcascadeoff函数
    需要返回
    casecadeStep1的结果
基本上,一旦您使用
async
函数或使用承诺“做事情”的函数,它们都需要返回一个承诺。只要所有内容都返回一个承诺,并在其内部操作完成时解析,
wait
就可以正常运行

同步函数,在某个点调用异步函数并等待它完成

到那时,“同步功能”已不再同步。它是异步的,应该返回一个承诺(对于结果值或
未定义的
)。它可以通过返回异步调用返回的承诺,如果它想在异步调用后执行其他操作,则在该承诺上使用
then
,或者通过
wait
等待承诺

同步函数,在某个点调用异步函数并等待它完成


到那时,“同步功能”已不再同步。它是异步的,应该返回一个承诺(对于结果值或
未定义的
)。它可以通过返回异步调用返回的承诺,如果它想在异步调用后执行其他操作,可以在该承诺上使用
then
,也可以通过
wait
等待该承诺。

删除了冗余的“async”:=)是否要从这些方法返回任何内容?如果答案是否定的,那么有些是异步的,有些不是,这一事实就无关紧要了。这只是时间问题。编辑:我在一些例子中编辑了级联函数中的过程。在这段代码中发生的主要事情之一是将一些HTML元素设置为某些值(主要是下拉菜单选项)。问题是,这个网站的设计目的是利用这些元素中的值进行预订。摆在我们面前的功能的任务是自动为预订设置一些值。点击按钮“为我最喜欢的工作站进行预订”,然后相应地设置相应的菜单元素,然后脚本获取这些值,并用于调用注册预订的数据库。我知道,这绝对不好。@Liam如果函数有副作用,或者它们抛出错误,这不是无关紧要的。删除了冗余的“async”:=)是否要从这些方法返回任何内容?如果答案是否定的,那么有些是异步的,有些不是,这一事实就无关紧要了。这只是时间问题。编辑:我在一些例子中编辑了级联函数中的过程。在这段代码中发生的主要事情之一是将一些HTML元素设置为某些值(主要是下拉菜单选项)。问题是,这个网站的设计目的是利用这些元素中的值进行预订。摆在我们面前的功能的任务是自动为预订设置一些值。点击按钮“为我最喜欢的工作站进行预订”,然后相应地设置相应的菜单元素,然后脚本获取这些值,并用于调用注册预订的数据库。我知道,这绝对不好。@Liam如果函数有副作用,或者抛出错误,这不是无关紧要的。你能不能在没有ping的情况下编辑我的答案me@Liam你的版本客观上更糟。我做了很多编辑来改进问题和答案,堆栈溢出不需要权限,只需要声誉。我不认为我故意破坏了它,我会让它保持原样,因为编辑战有点毫无意义。了解如何