在满足条件之前不要运行功能

时间:2015-01-06 18:43:47

标签: javascript setinterval

我有2个值

var maxValues;
var incrementValues;

我有一个功能。

runFunction();

值基于ajax成功而增加。

如何继续检查maxValues是否等于incrementValues,一旦它们相等,那么运行runFunction()

2 个答案:

答案 0 :(得分:6)

在您的ajax请求的success回调中添加检查

这比使用间隔更好。

var check = function (maxValues, incrementValues) {
    if (maxValues == incrementValues) {
        runFunction();
    }
};

$.get( "example.php", function(data) {
    // Ajax successful
    check(data.maxValues, data.incrementValues);
});

或者@TedHopp建议,使用always回调:

$.get( "example.php", function() {
    // Ajax successful

}).always(function() {
    // success or no success, just "always"
    check(maxValues, incrementValues);
});

查看jQuery API Docs以获取更多信息。

如果您不想将其添加到每个ajax请求,您可以构建一个隐式调用您的支票的自定义Ajax函数,请参阅此答案以获取帮助:jQuery AJAX custom function and custom callback?。< / p>

答案 1 :(得分:0)

如果您正在寻找一个简单,开箱即用的解决方案,可以节省几行代码,我有一个专门用于此目的的小型库(在满足所有给定条件时运行回调):{{ 3}}

我知道接受的答案已经解释了应该做些什么。但是,每当你可以使用超轻量级库提供的单行时,为什么要写检查

以下是:

&#13;
&#13;
// Define the list of names for the conditions.
var conditions = [
  'downloaded_a',
  'downloaded_b',
  'timeout'
];

// Define what needs to run when all conditions are met.
var runAtTheEnd = () => {
  alert('All conditions met!');
};

// Create the race.
var race = SETRACE(conditions, runAtTheEnd);

$.get('http://i.imgur.com/y8bqp8t.png', race.set['downloaded_a']);

$.get('http://i.imgur.com/bDp49NE.png', race.set['downloaded_b']);

window.setTimeout(race.set['timeout'], 3000);

// Now when all three conditions are met, `runAtTheEnd` will be called.
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/Zodiase/setrace/v1.0.1/setrace.js"></script>
&#13;
&#13;
&#13;