【问题标题】:unable to make jquery when & then complete before function return无法在函数返回之前完成 jquery
【发布时间】:2014-07-10 17:01:16
【问题描述】:

我希望执行顺序如下。 1. 取消附加(x) 2.更新列表(y) 3. console.log("函数更新执行完成")

只有在两个函数(unattach 和 updateLists)都完成执行后,更新函数才会返回。问题是我无法让它等待两个函数完成执行。 return 语句有问题吗?

    function main()
    {
        when(update).then(function(){
        console.log("completed execution of function update");
        });
    }

    function update()
    {
    return when(function(){
            unattach(x);
            }).then(function(){
                    updateLists(y);
                    }); 
    }

【问题讨论】:

    标签: jquery return .when


    【解决方案1】:

    我会这样重写它,使用回调。无论如何,你应该写更多的代码。

    function main() {
    
        update(function(){
           console.log("completed execution of function update");
        });
    
    }
    
    function update(callback){
            unattach(x, function(){
               updateLists(y, function(){
                  if(callback){
                     callback();
                  }
                });
            }); 
    }
    

    假设函数 unattach 和 updateLists 中有两个 AJAX 调用,您可以这样做:

    function unattach(x, callback){
       // if JQuery
    
       $.ajax({
          ....
          success: function(){
             if(callback){
               callback();
             }
          }
       });
    }
    

    您应该以同样的方式定义 updateLists,因此当 AJAX 完成其工作时会调用回调函数。

    【讨论】:

    • 这将改变更新功能。我在代码中的多个位置使用更新功能。我不想从更新中调用 console.log 代码。
    • 抱歉,提供的代码片段不足以准确地看到您的程序中正在发生的 ehat。为什么需要在更新函数中返回一些东西?以及为什么它在应用于代码的其他部分时会有所不同。它的行为方式应该相同。此外,如果不在范围内,则应添加 x 和 y 作为参数。
    • unattach & updateLists中有http get和post请求。它需要按照顺序执行。只有当这些请求完成后,我才想回到主函数并执行一些操作。我没有从更新函数返回任何值,我希望流程仅在成功完成更新函数和更新函数中的所有函数后返回。
    • 你在使用 JQuery 吗?我用如何添加回调以在 AJAX 函数中使用它们更新了答案。希望清楚!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2018-02-08
    • 2020-09-26
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多