2014-12-21 90 views
1

我有一个函数可以执行多个DDBB调用,所以它是异步的。来自同一函数内部的Javascript调用函数

我需要调用的功能和它返回的JSON对象查看数据值(冠军)。如果这是真的,我需要再次调用函数,直到赢家==假。

一段时间,因为它不是异步,我怎么能做到这一点,我不能用?

someFunction(function(result) { 
    // if result.winner == true repeat 
    }) 
+2

将调用放到实际返回结果的成功内部。 – rfornal

+1

你能包含整个代码片段吗?我具体指的是从数据库获取代码的函数。 – JKaan

+0

@fornal你的意思是从相同的函数内调用函数? – Egidi

回答

1

可以再次调用相同的回调函数,直到条件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); 
 
}

0

你有没有看着async.js?它有几个控制流异步功能。你可能想看看,同时,doWhilst,直到doUntil:

https://github.com/caolan/async#whilst

​​

多次拨打FN,而测试返回true。停止时调用回调,或发生错误。