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

Do not run function until condition is met

我有 2 个值

var maxValues;
var incrementValues;

我有一个功能。

runFunction();

数值增加基于 ajax 次成功。

如何不断检查 maxValues 是否等于 incrementValues,一旦它们相等,然后运行 ​​runFunction()

在 ajax 请求的 success 回调中添加 check

这比使用间隔要好。

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? .

如果您正在寻找一种简单、开箱即用的解决方案,可以节省几行代码,我有一个专门用于此目的的小型库(运行 所有给定条件都满足时的回调在这里遇到):https://github.com/Zodiase/setrace.

我知道接受的答案已经解释了应该做什么。但是为什么每次都写 check 可以使用超轻量级库提供的单行代码呢?

方法如下:

// 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.
<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>