javascript - 使函数相互依赖

标签 javascript jquery

我正在使用jquery,并试图让一些函数在彼此之后触发。以下似乎正确吗?我几乎是在函数中调用函数。

  $j = jQuery.noConflict();
            var obj;
            var items = new Array();


            $j(document).ready(function() {
                                
                function setTopicsSpans() {               
                    // do stuff
                    //.....
                }
                
                function ajaxGetTopicRatings() {
                    var request = $j.ajax({
                        url: "json.php",
                        type: "GET",
                        data: {"items": items},
                        cache: true,
                        contentType: 'application/json; charset=utf-8',
                    });                    
                    request.done(function(data) {
                        //console.log(data);
                        obj = jQuery.parseJSON(data);
                        setTopicsSpans();
                    });
                    //......
                }
                function setTopicsArray() {
                    $j('[data-tid]').each(function() {
                        items.push(this.getAttribute('data-tid'));
                    });
                    ajaxGetTopicRatings();
                }
                
                setTopicsArray();
                
            });

现在我读了一些有关回调函数的内容。但是当我在函数 ajaxGetTopicRatings(setTopicSpans) 中输入“setTopicsSpans”时,我收到一个错误,该函数:“setTopicsSpans”不存在。有人知道如何做到这一点吗?

最佳答案

是的,我第一次完全误解了这个问题。这里是回调:

您已经通过“request.done”方法使用了某种回调。如果您想运行您建议的功能,您可以执行以下操作:

function ajaxGetTopicRatings(myCallback) {
    //code code code

    if (myCallback && typeof(myCallback) === "function") {
        myCallback();
    }
}

然后您可以通过...调用电话

ajaxGetTopicRatings(function () { setTopicsSpans() });

这将确保“setTopicsSpans”在“ajaxGetTopicRatings”内调用之前不会运行。

(确保正确输入函数名称,而不是原来的问题:“...但是当我在函数 ajaxGetTopicRatings(setTopicSpans) 中输入“setTopicsSpans”时,我得到一个错误..")

在函数末尾添加这样的回调,仍然不能保证它将是最后运行的事情。在您的示例中,最后运行的操作很可能是“request.done()”,因为代码不会等待此操作。这可能是回调驻留的好地方。

我在下面的代码片段中添加了一个函数调用顺序的小示例。

function test1CB1(myCallback) {
  document.write('test1 CB1 hit<br/>');
  myCallback();
}

function test1CB2(myCallback) {
  document.write('test1 CB2 hit<br/>');
  myCallback();
}

function test1CB3() {
  document.write('test1 CB3 hit<br/><br/>');
  test2();
}

function test2CB1() {
  document.write('test2 CB1 hit<br/>');
}

function test2CB2() {
  document.write('test2 CB2 hit<br/>');
}

function test2CB3() {
  document.write('test2 CB3 hit<br/>');
}

function test2() {
  document.write('Standard behaviour - inner most function gets called first<br/>');
  test2CB1(test2CB2(test2CB3()));
}

document.write('Functions fire after each other using callbacks<br/>');
test1CB1(function() {
  test1CB2(function() {
    test1CB3();
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

关于javascript - 使函数相互依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189111/

相关文章:

Javascript:转换日期或除以 1

javascript - 在两个容器中渲染 Highcharts 图表

javascript - React/Firebase - 如何确保在重定向之前发生更新?

jquery - 如何使用数据表和服务器端处理进行自定义过滤

javascript - Angularjs $scope.data 未在 html 中显示

javascript - 有没有办法在 AngularJS 中同时订阅多个事件?

Jquery Cookie onclick 函数

javascript - 使用 ESC 键 HTML 提交表单

javascript - 更新 Bootstrap slider 的刻度值

jquery - 在 HTML 中存储隐藏值(工具提示、错误、默认值)最佳实践