我正在构建跟踪库以将事件发送到后端。应每5秒创建一个事件(可配置)并将其发送到跟踪队列,并将跟踪队列发送到后端并每5秒清空一次(也可配置)。预期的行为是应该每5秒向后端发送一个事件。
当我只是控制台。记录事件时,一切都按预期工作,但是当我实现xhr请求时,间隔事件仅每9秒创建一次。因此,事件将被发送到后端,每两次只发送一次' post'功能被解雇。
sendData: function(){
var toSend = [].concat(Tracking.__tracking_queue);
if(toSend.length !== 0){
var sendData = this.__stringifyAndSetHeaders(toSend);
Tracking.postData(sendData);
}
},
postData: function(sendData){
var xhr = new XMLHttpRequest();
xhr.onload = function() {
console.log(xhr.responseText);
Tracking.__tracking_queue = [];
};
xhr.open("POST", sendData.url, true);
Object.keys(sendData.headers).forEach(function(key){
xhr.setRequestHeader([key], sendData.headers[key]);
});
xhr.send(sendData.body);
}
后端正在接收数据,但不是在正确的时间。正在从setInterval循环中调用sendData。
setInterval(function(){
self.sendData()
}, 5000);
我之前在使用axios的另一个文件中完成了相同的设置,但是在这个用例中我无法使用axios。
答案 0 :(得分:1)
您正在错误的位置重置跟踪数据。读取数据,而不是发出请求,请求完成后,删除数据。有一段时间,数据可以在请求和完成之间进入队列。
var randomName = Guid.NewGuid().ToString():
var fullPath = Path.Combine(dicompath, randomName);
Directory.CreateDirectory(fullPath);
finalpath = port + " -pm" + " --fork " + " -aet " + AE +" " + "-od " + ((char)34) + fullPath + ((char)34);
//.... rest of your code....