我试图从一个函数中获取一个返回值,但是我得到的只是“未定义”。我猜是由于JS执行功能的顺序,但首先让我介绍一下代码的简化版本:
// Analyzing Jenkins log
function analyseRawLog(callback) {
let xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState === 4 && this.status === 200) {
callback(this.responseText);
} else if (this.readyState === 4) {
console.log("Failed to get raw console output.");
}
};
xhttp.open("GET", "consoleText", true);
xhttp.send();
}
// Takes as a parameter the output ofthe console, which
// is parsed from previous function
function analyseMetricsLog(consoleOutput) {
let analysisArray = [];
console.log("Analysing logs...");
// A for loop regexing the console output
// Results are appended in the array, which I return in the end
return analysisArray
}
// initiating the function on the page
analyseRawLog(analyseMetricsLog)
到目前为止,它可以按预期工作(因为我对每个解析的信息都使用console.log)。但是,我想在Jenkins页面中添加一个额外的UI,其中包含此信息。这就是为什么我添加了包含所有信息的analysisArray
。我计划将此数组添加到另一个函数中,该函数在Jenkins UI中可视化信息。这是我尝试做的简化版本:
function analyzeUI(){
// skipping the unimportant UI stuff
let results = []; // creating an array to contain the results
results = analyzeRawLog(analyzeMetricsLog) // I want to get the return value of
// the function, so I output it in
the UI
}
但是,如果我尝试console.log(results)
,我将变得不确定,这可能是由于此后执行的函数所致。我尝试了几种解决方案,但似乎都不起作用:
1)进行嵌套的回调:
function analyseMetricsLog(consoleOutput, callback)
在.js文件的末尾:
analyseUI(analyseRawLog(AnalyzeMetricsLog))
我试图在我的UI函数中获取回调值,但是 它说回调不是函数。
2)我尝试使用从未使用过的async
和await
,但是
结果完全一样。
您能给我一些如何获得此返回值的提示吗?