2016-06-07 1 views
0

Я пытался хранить данные из асинхронного вызова в переменную/объект/массив вне функции. Я видел пару решений, которые делают синхронные вызовы, используя обратные вызовы и т. Д., Но ни один из них не работает для моего сценария. Это то, что я пытаюсь сделатьКак сохранить данные из асинхронных вызовов d3 в функции document.ready передать его функции

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' и просто поместить свой код в конец справа до конца тега body. Затем переместите вашу обработку на 'x' в функцию обратного вызова' d3.json' (которая, кстати, не похожа на действительный код выше). – Mark

+0

@Mark Я использовал функцию обратного вызова и попытался использовать функцию x внутри функции d3.json. Я пытаюсь хранить данные из api постоянно после каждых 5 секунд, то как я могу это достичь? – 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

Смежные вопросы