如何在document.ready函数中访问d3异步调用中存储的数据以将其传递给函数

问题描述:

我试图将异步调用中的数据存储到函数外的变量/对象/数组中。我已经看到了几个解决方案,使呼叫同步,使用回调等,但没有一个适用于我的情况。这就是我要做的如何在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

你需要作出延期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