如何在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);
});
});
答
你需要作出延期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.");
});
这是一个严重的竞争条件和你不应该像这样构造你的代码。您应该放弃使用'document.ready',并且只需在正文标签结束之前将代码放在最后。然后将'x'上的处理移动到'd3.json'回调函数中(顺便说一下,这看起来不像上面的有效代码)。 – Mark
@Mark我使用了一个回调函数,并尝试让我的x在d3.json函数内。我试图在每隔5秒后不断地存储api的数据,那我该如何实现呢? – hhhh4