gpt4 book ai didi

javascript - JavaScript 中的回调

转载 作者:行者123 更新时间:2023-12-03 08:17:22 25 4
gpt4 key购买 nike

一个菜鸟问题,但我试图了解 PapaParse (或其他任何东西)如何使用回调。当我使用以下代码时:

这是修改后的完整代码:

<html>
<head>
<script src="papaparse.js"></script>
<script src="drawTable.js"></script>

</head>
<body>
<label>Load CSV file: </label><input type="file" id="fileInputCSV" /><br/>

Results:
<table id="outputTable" border=1 px>
<tbody id="objTable"></tbody>
</table>


<script type="text/javascript">
var csvData = [];
function GetCSV(doneCallback) {
var fileInput = document.getElementById('fileInputCSV');
Papa.parse(fileInput.files[0], {
header: true,
skipEmptyLines: true,

complete: function(results) {
console.log('Done.');
doneCallback(results);
}
});
}
}

GetCSV(function(csvData) {
console.table(csvData.data);
drawTable(csvData.data, "objTable");
});
</script>
</body>
</html>

我必须重新加载页面才能获取console.table,并且PapaParse生成的对象在PapaParse函数之外不可用。

我知道这个问题已经以其他形式被问过,但总是在 jQuery 中得到回答。有没有纯 JavaScript 的解决方案?我真的不仅需要能够显示数据,而且实际上能够使用它。

PapaParse 本身对于其程序的基本使用非常安静......

谢谢!

最佳答案

所有想要在异步结果可用时就可靠地使用它的代码必须位于完成回调函数内,或者必须位于从该回调函数调用的函数中。

这是因为异步响应稍后会在不确定的时间发生。在代码中,您唯一可以准确知道结果何时准备就绪的位置是完成回调本身。尝试将异步结果填充到一些更高作用域的变量中然后稍后使用它是一种非常糟糕的做法,因为您的其他代码将不知道该值何时实际可用 - 通常会导致各种计时问题。

这是一种与顺序编程不同的编程类型。您不只是调用 getCSV(),然后在下一行代码中使用该结果。结果要在一段时间后才能获得。

如果您想知道 getCSV() 的结果何时可用,您可以构造它以使其接受回调:

function GetCSV(doneCallback) {
var fileInput = document.getElementById('fileInputCSV');
Papa.parse(fileInput.files[0], {
header: true,
skipEmptyLines: true,

complete: function(results) {
console.log('Done.');
doneCallback(results);
}
});
}

然后,您可以像这样调用它并在回调中使用结果:

GetCSV(function(csvData) {
// use the data here
drawTable(csvData.data, "objTable");
});

关于javascript - JavaScript 中的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33881536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com