【问题标题】:Storing function call results for later referall存储函数调用结果以供以后参考
【发布时间】:2016-10-20 01:01:54
【问题描述】:

我一直在尝试尽可能多地阅读有关 javascript 回调和 jquery 延迟对象的信息,但显然事情并没有为我所用。当我通读它并练习示例时,它似乎有一种模糊的意义,但是当我尝试将它应用于我的具体问题时,我只是碰壁了。如果有人能理解我正在尝试做的事情并提供想法,将不胜感激!

这是一些现有的代码:

$(document).ready(function() {
    firstFunction();
    secondFunction(); 
});

为了简单起见,我不会深入讨论 firstFunction() 和 secondFunction() 的作用,但只要说它们都执行异步工作就足够了。

这是我的问题: firstFunction() 依赖于准备好的文档,因此需要在 $(document).ready(function() { } 中。secondFunction() 不依赖于 $(document).ready(function(),但应该只在 firstFunction 完成后执行。我希望在 $(document).ready(function() { } 块之前完成 secondFunction() 的所有计算,但只在 firstFunction() 完成后执行它。这样 firstFunction 和secondFunction 将以更加视觉无缝的方式执行。所以基本上,我想做如下伪代码:

var deferredSecondFunction = secondFunction().compute().defer(); //perform computation for secondFunction but defer execution

$(document).ready(function() {
    firstFunction().done.execute(deferredSecondFunction().execute()); //finally execute secondFunction once firstFunction has completed. 
});

有谁知道这是否可能?一个重要的警告是,我需要在没有 Javascript Promise 对象的情况下执行此操作,因为由于此问题范围之外的原因,我正在使用的 webkit 是旧版本。如果有人可以帮助我理解这一点,将不胜感激!

【问题讨论】:

    标签: javascript jquery callback


    【解决方案1】:

    显示的代码使用回调函数和自调用匿名 JavaScript 函数,例如:

    var calculatedObject;
    (function(){
        // Will be executed as soon as browser interprets it.
        // write code here & save your calculations/operations
        calculatedObject = { ... };
    })();
    
    function firstFunction(callback){
        // Do stuff
        callback();
    }
    
    function secondFunction(){
       // Do more stuff
       // Use your calculations saved in the calculated object.
    }
    
    $(document).ready(function(){
        firstFunction(secondFunction);
    });
    

    这样第二个函数只会在第一个函数结束时被调用。

    【讨论】:

    • 谢谢,但这如何确保在文档准备好之前完成 secondFunction 的计算?或者这根本不可能?
    • 当你说计算时,你的意思是第二个函数存在吗?或者您实际上是否有 3 个函数,您希望在文档准备好之前执行其中一个函数?
    • 这两个函数已经存在,但是第二个函数的执行可以独立于文档准备就绪。但我实际上只想在 firstFunction 之后调用该函数,这取决于准备好的文档。希望我说得通。
    • 这取决于你想要达到的目标。在我看来,您可能需要计算大量计算,但仅在 firstFunction 完成时执行。您可以拥有第三个函数,您可以在其中进行计算并将值存储在 javascript 对象中,然后您可以在其他函数中使用。
    • 你基本上是说你有一个 secondFunction_AsecondFunction_B 有不同的要求:A 独立于准备好的文档,而 B 依赖于传递属性(B依赖于firstFunction,它依赖于文档准备就绪)。正如@Alex 所说,如果您认为有必要,您可以将计算分解为一个单独的函数
    【解决方案2】:

    你可以使用回调..

    function f1(){
        //do some stuff
    }
    
    function f2(callback){
        // do some async stuff
        callback();
    }
    
    f2(f1);
    

    此示例将一个函数传递给另一个函数。然后第二个函数在它准备好时调用第一个函数。

    【讨论】:

    • 我想我仍然对这将如何在 $(document).ready 之前执行 f2 的计算感到困惑?
    • 它没有。在f2 调用它之前它不会做任何事情。
    猜你喜欢
    • 2022-11-23
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多