javascript-检测链接函数的结尾?

javascript-检测链接函数的结尾?,javascript,function,chaining,Javascript,Function,Chaining,今天我正在处理一个使用链式函数调用的pet项目,我很好奇如何检测链式函数中的最后一个函数何时执行。例如: func1('initial data').func2().func3().func4(); 在func2-4完成“初始数据”的处理后,我想检测func4何时完成。由于func4()并不总是链中的最后一个函数,例如,它可能以.func3()或.func5()结尾,或者我可以根据尝试执行的操作混合调用函数,我正试图找到一种方法来检测是否有更多的函数调用正在进行,但我没有走多远。传统的方法是在

今天我正在处理一个使用链式函数调用的pet项目,我很好奇如何检测链式函数中的最后一个函数何时执行。例如:

func1('initial data').func2().func3().func4();

在func2-4完成“初始数据”的处理后,我想检测func4何时完成。由于func4()并不总是链中的最后一个函数,例如,它可能以.func3()或.func5()结尾,或者我可以根据尝试执行的操作混合调用函数,我正试图找到一种方法来检测是否有更多的函数调用正在进行,但我没有走多远。

传统的方法是在下一行的最后一个函数之后放上你想做的任何事情:

func1('initial data').func2().func3().func4();
allFunctionsDone();

)()

传统的方法是在最后一个函数之后,将您想要做的事情放在下一行:

func1('initial data').func2().func3().func4();
allFunctionsDone();

)()

您可以编写sequencer,它将帮助您完成这项工作。不执行直接调用,而是移动函数的名称并逐个调用它们。像这样的

executeSequence(func1('init_dat'),[
    'func2',
    'func3',
    'func4'
]);

您可以编写sequencer,它将帮助您完成这项工作。不执行直接调用,而是移动函数的名称并逐个调用它们。像这样的

executeSequence(func1('init_dat'),[
    'func2',
    'func3',
    'func4'
]);
你不能

此外,如果它们没有链锁:

var v = func1('initial data');
v = v.func2();
v = v.func3();
v = v.func4();
你认为最后一个功能是什么?每个函数都是它自己链中的最后一个函数,但是如果你在每个步骤后都完成了一些事情,那就行不通了

只需创建一个您最后调用的函数来完成流程。

您不能

此外,如果它们没有链锁:

var v = func1('initial data');
v = v.func2();
v = v.func3();
v = v.func4();
你认为最后一个功能是什么?每个函数都是它自己链中的最后一个函数,但是如果你在每个步骤后都完成了一些事情,那就行不通了



只要做一个你最后调用的函数来完成这个过程。

是的,这基本上是我已经做过的。我已经创建了一个done()函数,所以我要像func1().func2().func3().done()一样链接;目前还可以,你当然可以。当函数返回时,函数就完成了。@Justin:你误解了这个问题。他不想知道每个函数何时完成,他想知道最后一个函数何时完成。@Guffa我没有误解。我也觉得他想知道最后一个功能何时完成。看@Rich的答案。@Justin:你仍然完全没有抓住要点。他不想在事后再做那个额外的调用,但是从函数内部检测它。是的,这基本上是我已经做过的。我已经创建了一个done()函数,所以我要像func1().func2().func3().done()一样链接;目前还可以,你当然可以。当函数返回时,函数就完成了。@Justin:你误解了这个问题。他不想知道每个函数何时完成,他想知道最后一个函数何时完成。@Guffa我没有误解。我也觉得他想知道最后一个功能何时完成。看@Rich的答案。@Justin:你仍然完全没有抓住要点。他不想在之后进行额外的调用,而是从函数内部检测它。如果函数是同步的,那么这没有什么特别的。函数在返回时完成,不管它是否链接。如果函数是同步的,那么这没有什么特别的。函数返回时即完成,无论其是否已链接。此操作没有任何好处。我对此投了赞成票,因为如果返回的某个对象可能有或可能没有链中的下一个方法,则会有好处。sequencer可以在调用下一个方法之前检查它是否存在。@Justin Johnoson,IMHO:这完全取决于您如何以及在哪个上下文中使用此代码。如果您构建一些可以参数化的动态代码,使用嵌套的Sequencer、错误处理、start()和stop()过程等,它可能非常有用。虽然启动和停止程序等在某些情况下是有用和必要的,但这并不是问题所在,支持这一点的逻辑远远超出了需要。事实上,不需要额外的逻辑,因为OP的问题真的很简单,正如@Rich所回答的那样。这没有任何好处。我投票赞成这一点,因为如果返回的对象之一可能有或可能没有链中的下一个方法,这会有好处。sequencer可以在调用下一个方法之前检查它是否存在。@Justin Johnoson,IMHO:这完全取决于您如何以及在哪个上下文中使用此代码。如果您构建一些可以参数化的动态代码,使用嵌套的Sequencer、错误处理、start()和stop()过程等,它可能非常有用。虽然启动和停止程序等在某些情况下是有用和必要的,但这并不是问题所在,支持这一点的逻辑远远超出了需要。事实上,没有额外的逻辑是必要的,因为OP的问题非常简单,正如@Rich.justice所回答的那样。这个问题并没有什么奇怪或神秘之处。当JavaScript同步执行时,它的行为与任何其他过程语言一样。当函数返回时,它就完成了,然后你就可以继续了。这个问题并没有什么奇怪或神秘之处。当JavaScript同步执行时,它的行为与任何其他过程语言一样。当函数返回时,它将完成,然后您可以继续。