安装设备API
我有一个安装设备的API。
当我点击它时,API将开始安装我的设备,然后返回taskID
监控API
然后我会使用taskID
传递给另一个API调用来跟踪安装进度。
Monitor API将返回1到200之间的整数,这是我安装进度的百分比。
是继续调用监视器API,并实时异步更新我的进度条。 当它达到200时,它将完成,我将隐藏进度条并显示成功消息。
逻辑
核心代码
代码
var ajax = $.ajax({
headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('value')},
url: '/installDevice',
type: 'POST',
dataType: 'json',
data: {'security-level':'medium'}
});
ajax.done(function ($installDeviceResponse) {
console.log($installDeviceResponse);
if($installDeviceResponse['result'][0]['status']['code'] == 0){
var taskId = $installDeviceResponse['result'][0]['data']['task'];
var $percent = 0;
do {
$.ajax({url: '/monitor/'+taskId})
.done(function ($percent) {
setTimeout(function(){
console.log('P TaskIdResponse : ',$percent);
// update prograssbar
// I don't have this yet.
// I'm trying to print it out for now
}, 1000);
});
}
while ($percent < 200);
}else{
var message = $installDeviceResponse['result'][0]['status']['message'];
var code = $installDeviceResponse['result'][0]['status']['code'];
console.error('Error code : ' + code + ' ' + message );
}
});
return;
我把1s
的计时器,因为我不想DDOS API服务器。
我得到的结果是无限循环,:(
我还没有添加进度条,因为我想先让代码在控制台中运行。 我现在得到的只是加载图标......
加载图标似乎冻结
控制台似乎冻结,甚至无法扩展我的反应 由于CPU使用率高,计算机会产生很多风扇噪音铬响应滞后
如何继续进行调试?
我现在对任何建议持开放态度。
任何提示/建议/帮助都将非常感谢!
答案 0 :(得分:2)
您正在尝试以错误的方式进行投票。我会告诉你例子。
方法1使用Jquery ajax
function poll(){
$.ajax({ url: "server", success: function(data){
//Update your dashboard gauge
console.log('P TaskIdResponse : ',$percent);
}, dataType: "json", complete: poll, timeout: 2000 });
})();
一旦前一个请求结束,它将非常快速地进行轮询。
方法2使用setTimeout
// The setTimeout Technique (Not Recommended - No Queues But New AJAX Request Each Time ∴ Slow)
(function poll(){
setTimeout(function(){
$.ajax({ url: "server", success: function(data){
//Update your dashboard gauge
salesGauge.setValue(data.value);
//Setup the next poll recursively
poll();
}, dataType: "json"});
}, 30000);
})();
我用于创建长轮询并检查用户状态的另一种方法。
(function() {
var status = $('.status'),
poll = function() {
$.ajax({
url: 'status.json',
dataType: 'json',
type: 'get',
success: function(data) { // check if available
status.text('Offline!');
if ( data.live ) { // get and check data value
status.text(data.info); // get and print data string
clearInterval(pollInterval); // optional: stop poll function
}
},
error: function() { // error logging
console.log('Error!');
}
});
},
pollInterval = setInterval(function() { // run function every 2000 ms
poll();
}, 2000);
poll(); // also run function on init
})();
希望这有帮助