我有一个python文件,它将结果附加到日志文件中,我需要在UI中同步打印此日志。
以下是我的代码
var flag = 0;
function write_log_in_file(){
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost/build5/builds/test.py",
"method": "POST",
"headers": {
"cache-control": "no-cache"
}
}
$.ajax(settings).done(function (response) {
flag =1;
console.log(response);
});
};
function get_log_from_file(){
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost/build5/builds/build.log",
"method": "GET",
"headers": {
"cache-control": "no-cache"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
};
//Write build log in build.log file
write_log_in_file();
//Get log until python call is completed
while(!flag){
get_log_from_file();
}
这里,我使用了flag变量,在我的第一个ajax调用完成后设置为1。在那之前,我的第二个ajax调用是递归调用的。
由于我使用了while,因此标志变量永远不会变为1,而变为无限循环。
还有其他方法,我可以递归调用我的ajax函数,而其他ajax函数完成了吗?
答案 0 :(得分:1)
$.ajax
会返回您可以链接的承诺。
function write_log_in_file(){
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost/build5/builds/test.py",
"method": "POST",
"headers": {
"cache-control": "no-cache"
}
}
return $.ajax(settings) // return a promise
};
function get_log_from_file(){
var settings = {
"async": true,
"crossDomain": true,
"url": "http://localhost/build5/builds/build.log",
"method": "GET",
"headers": {
"cache-control": "no-cache"
}
}
return $.ajax(settings) // return a promise
};
//Write build log in build.log file
write_log_in_file()
.then(function(result) {
console.log(result) // log write result
return get_log_from_file() // launch read
})
.then(function(result) {
console.log(result) // log read result
})
.catch(function(error) {
console.error(error);
});
答案 1 :(得分:0)