我试图在函数(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
答案 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);
});