无法从另一个函数[JavaScript]中的回调函数接收返回值

时间:2019-11-01 11:42:36

标签: javascript asynchronous ecmascript-6 promise callback

我试图从一个函数中获取一个返回值,但是我得到的只是“未定义”。我猜是由于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)我尝试使用从未使用过的asyncawait,但是 结果完全一样。

您能给我一些如何获得此返回值的提示吗?

0 个答案:

没有答案