javascript代码仅适用于断点

时间:2018-04-22 12:08:08

标签: javascript jquery

我试图在函数(1)中运行一些异步代码,但是我无法获得函数(1)的输出,我需要将其用作函数(2)的输入。它返回' undefined。 但是,如果我在函数(1)的return语句中放置一个断点,它就会开始工作&当我删除断点时再次停止。 如果有人能帮助我,我会很感激。

oFile = oEvent.getParameter("files")[0];
var myFunc = function(){
    return new Promise(function(resolve, reject) {
      return resolve(S4HanaFioriAccelerator.common.handleListResponse(oFile));
    });
};
myFunc().then(function success(data) {
    console.log(data);
});



handleListResponse: function(file) {
var reader = new FileReader();

reader.onload = function(e) {
    data = e.target.result;
    results = [];
    cfb = XLSX.read(data, {
        type: 'binary'
    });

    cfb.SheetNames.forEach(function(sheetName) {
        sCSV = XLS.utils.make_csv(cfb.Sheets[sheetName]);
        oJS = XLS.utils.sheet_to_json(cfb.Sheets[sheetName]);
        for(var i= 0; i < oJS.length; i++){
            results.unshift(oJS[jsRowCount].Data);
        }
        console.log(results);
    });
};
reader.readAsBinaryString(file);
setTimeout(function(){
    console.log("Hello"); 
    return results;
}, 3000);       
}

在控制台中输出: undefined file1.js [&#34; Student1&#34;,&#34; Student2&#34;] file2.js 你好file2.js

预期产量: [&#34; Student1&#34;,&#34; Student2&#34;] file2.js 你好file2.js [&#34;学生1&#34;,&#34;学生2&#34;] file1.js

1 个答案:

答案 0 :(得分:2)

您可以通过返回一个承诺来使您的函数异步,该承诺将在完成后从您的函数返回数据。然后你可以在下面找到你的数据。

var myFunc = function() {
    return new Promise(function(resolve, reject) {
        var data = myNameSpace.common.handleListResponse(oEvent);
        return resolve(data);
    });
};

myFunc().then(function success(data) {
    console.log(data);
});