2014-12-21 127 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。停止時調用回調,或發生錯誤。