我有一个不归我所有的实用工具类。我正在调用该util类的方法之一,该方法调用一个ajax函数。并给我回复。
我需要根据响应对象做出决定。问题是响应对象需要一些时间来填充(mili seconds)。
var selector = dojo.byId("SelectorId");
var theChart = new chart( selector, 135, 92, style, frequency, time);
if(theChart.data ===null){
console.log("No response");
}else{
Console.log("Use response data");
}
和
chart( selector, 135, 92, style, frequency, time);
不归我所有。 chart()来自util类。
上面的代码段可以解决断点。但是当我删除断点时,它始终以“if”阻止开始。
如何解决此问题。
答案 0 :(得分:1)
如果你使用 setTimeout ,它应该可以解决你的问题:
var selector = dojo.byId("SelectorId");
var theChart = new chart( selector, 135, 92, style, frequency, time);
setTimeout(function(){
if(theChart.data ===null){
console.log("No response");
}else{
Console.log("Use response data");
}
}, 100);
或者,您可以使用 setInterval 。下面的示例检查变量avery 100msecs,并在N = 10次尝试后返回'false':
var maxTries = 10;
var checkFunction = function(){
if(theChart.data === null){
--maxTries;
}else{
Console.log("Use response data");
clearTimeout(checkFunction);
return;
}
if( 0 == maxTries ) {
console.log("No response");
clearTimeout(checkFunction);
}
} ;
setTimeout(checkFunction, 100);
答案 1 :(得分:1)
图表对象应提供某种回调挂钩,以便在数据可用时通知您。
像
这样的东西theChart.onData = function(data){
console.log(data);
// or
console.log(theChart.data);
}
如果没有,你必须使用超时来补充功能。由于您无法知道服务器是否需要一些时间来响应,因此您可能需要重复尝试。
这个(未经测试的)函数应调用内部函数,直到数据可用,然后调用提供的回调函数。
function chartdata(ch,cb){
(function(){
if(ch.data === null){
window.setTimeout(arguments.callee, 100);
} else {
cb(ch);
}
})();
};
你会这样使用它:
chartdata(new chart( selector, 135, 92, style, frequency, time), function(theChart){
console.log(theChart.data);
});
如果服务器根本没有响应,您可能需要添加中止条件。