我有一个执行多个DDBB调用的函数,因此它是异步的。
我需要调用该函数并检查它返回的JSON对象中的数据值(获胜者)。如果确实如此,我需要再次调用该函数,直到获胜者== false。
我不能使用while,因为它不是异步的,我该怎么做?
someFunction(function(result) {
// if result.winner == true repeat
})
答案 0 :(得分:2)
您可以再次调用相同的回调函数,直到条件为true
:
someFunction(function repeat(result) {
if (result.winner) {
someFunction(repeat);
}
});
查看下面的演示。
someFunction(function repeat(result) {
document.body.innerHTML += '<br>' + result.winner;
if (result.winner) {
someFunction(repeat);
}
});
var results = [true, true, true, false];
function someFunction(callback) {
setTimeout(function() {
callback({winner: results.shift()});
}, (Math.random() + 1) * 1000 | 0);
}
答案 1 :(得分:0)
你看过async.js了吗?它有几个控制流异步功能。你可能想看看,同时,直到,doUntil:
https://github.com/caolan/async#whilst
whilst(test, fn, callback)
反复调用fn,而test返回true。停止时调用回调,或发生错误。