2016-06-07 36 views
0

我試圖將異步調用中的數據存儲到函數外的變量/對象/數組中。我已經看到了幾個解決方案,使呼叫同步,使用回調等,但沒有一個適用於我的情況。這就是我要做的如何在document.ready函數中訪問d3異步調用中存儲的數據以將其傳遞給函數

var x = []; 
d3.json(url, response){ 
if(response{ 
    setInterval(funtion(){ 
    d3.json(url, response){ 
    x=response; 
    }); 
},5000); 
} 
} 

$(document).ready(function(){ 
    console.log(x); 
$.each(x, function(i,val){ 
    function(val); 
}); 
}); 
+0

這是一個嚴重的競爭條件和你不應該像這樣構造你的代碼。您應該放棄使用'document.ready',並且只需在正文標籤結束之前將代碼放在最後。然後將'x'上的處理移動到'd3.json'回調函數中(順便說一下,這看起來不像上面的有效代碼)。 – Mark

+0

@Mark我使用了一個回調函數,並嘗試讓我的x在d3.json函數內。我試圖在每隔5秒後不斷地存儲api的數據,那我該如何實現呢? – hhhh4

回答

0

你需要作出延期jQuery函數調用是這樣的:

function test(){ 
      var defer = $.Deferred(); 
      setTimeout(function(){console.log("prints 1st");defer.resolve();},1000); 
      return defer; 
} 
function test2(){ 
     console.log("prints 2nd"); 
     return $.when(); 
} 
test().then(test2).then(function() { 
      console.log("prints at the end.");  
}); 

這裏是一個工作示例http://jsbin.com/payitucami/edit?html,console

相關問題