我有一些JavaScript函數,通過網絡執行異步請求,並通過回調「返回」數據。下面是這是什麼樣子,當我使用它的一個例子:擺脫嵌套所需的JavaScript回調
RemoteQuery(server,query,function(ret) {
// do something with ret
})
的問題是,如果我有幾個疑問連續變得相當嵌套和困難的代碼來管理。由於我依賴於範圍變量,因此我無法將這些函數中的每一個都分解爲單獨的頂級函數。這裏是一個玩具例子:
RemoteQuery(server,query1,function(ret) {
var x = ret[5]
RemoteQuery(server,query2,function(ret) {
var y = ret[3]
if (x + y > 10) {
RemoteQuery(server,query2,function(ret) {
// do more stuff
})
}
})
})
顯然,如果我有超過2次或3的查詢它開始變得醜陋,我可能有很多比這更!
理想情況下,我想在沒有嵌套的情況下表示上述內容,例如
ret = RemoteQuery(server,query1)
var x = ret[5]
ret = RemoteQuery(server,query2)
var y = ret[3]
if (x + y > 10) {
ret =RemoteQuery(server,query2)
// do more stuff
}
但我想到的是唯一可能的工作將是解析JavaScript中,承認其有回調函數,它們在正確的形式,和eval重新寫,但這似乎非常複雜,並會使調試非常困難。
有沒有更好的機制來做到這一點?
數組函數怎麼樣? –
jQuery有這種可以幫助你的「延遲」技術,但我不知道你是否可以使用它。 – MaxArt