Javascript 迭代papa.parse对象的结果
我相信这可能是async或Promissions的问题,然而,这个概念一直是我难以理解的。我已经花了很多时间研究了一些与承诺和承诺相关的问题,但我相信我仍然没有掌握一些简单的概念 概述 在下面的代码中,从用户处收集Javascript 迭代papa.parse对象的结果,javascript,promise,es6-promise,papaparse,Javascript,Promise,Es6 Promise,Papaparse,我相信这可能是async或Promissions的问题,然而,这个概念一直是我难以理解的。我已经花了很多时间研究了一些与承诺和承诺相关的问题,但我相信我仍然没有掌握一些简单的概念 概述 在下面的代码中,从用户处收集.csv文件,使用PapaParse将其转换为对象,然后将距离/持续时间值添加到GoogleMaps距离矩阵中的数据中,最后,目的是将此数据作为包含此组合信息的.csv返回给用户 在downloadcv()中,我能够记录由getDistTime生成的对象。但是,我无法迭代此对象或将其发
.csv
文件,使用PapaParse将其转换为对象,然后将距离/持续时间值添加到GoogleMaps距离矩阵中的数据中,最后,目的是将此数据作为包含此组合信息的.csv
返回给用户
在downloadcv()
中,我能够记录由getDistTime
生成的对象。但是,我无法迭代此对象或将其发送给papa.unpasse以转换为.csv
。在代码下面,我附上了downloadcv()
中arr
结构的图像
我在这里花了很多时间研究问题,也在《帕帕协议》上。我将非常感谢任何关于如何最好地进行的帮助
arr的内容
:
代码
$(“#提交”)。单击(函数(){
//在激活之前删除此行,否则验证将被删除
event.preventDefault();
getData();
});
函数getData(){
var csv=document.getElementById('exampleFormControlFile1')。文件[0];
//解析CSV字符串
帕帕·帕斯(csv{
标题:对,
完成:功能(结果){
var final_rows=getDistTime(结果)
下载CSV(最终行)
}
});
}//结束getData
函数下载CSV(arr){
//log(arr)显示结果
//但尝试在arr上迭代或取消解析显示未定义
控制台日志(arr)
csv=Papa.UNPASE(arr)
…更多csv导出代码
}
函数getDistTime(资源){
变量行=[]
const promiseArr=[];
对于(var i=0;i{
resultsArr.forEach((result,i)=>
pushToRows(resources.data[i],result,rows));
})
返回行
}//结束getDistTime
功能按钮(资源、距离、行){
资源[“距离”]=dist_dur[0];
资源[“实际期间”]=地区期间[1];
资源[“财务期间人力资源”]=(期间[0]/45.0)。固定(2)
行。推送(资源)
}//末端推杆
getDistTime正在执行一个异步操作,因此在承诺之前,行返回空。所有问题都已解决,因为在该承诺解决之前,您不会向其推送任何数据
看起来您需要等待getDistTime的结果或更改get data的工作方式,但不确定您是否使用async Wait。最简单的方法是返回承诺。所有,然后仅在完整回调中返回并解析csv后下载csv
比如你可以做什么
function getData(){
var csv = document.getElementById('exampleFormControlFile1').files[0];
// Parse CSV string
Papa.parse(csv, {
header: true,
complete: function(results) {
getDistTime(results).then(finalRows => downloadCSV(finalRows));
}
});
} // end getData
function getDistTime(resources){
var rows = []
const promiseArr = [];
for (var i = 0; i < resources.data.length; i++) {
var origin1 = $("#citystate").val();;
var destinationA = resources.data[i]['DEMOBILIZATION CITY'] + ',' + resources.data[i]['DEMOBILIZATION STATE'];
promiseArr.push(googleRequest(origin1, destinationA));
}
return Promise.all(promiseArr)
.then((resultsArr) => {
resultsArr.forEach((result, i) =>
pushToRows(resources.data[i], result, rows)
);
return rows
})
} // end getDistTime
函数getData(){
var csv=document.getElementById('exampleFormControlFile1')。文件[0];
//解析CSV字符串
帕帕·帕斯(csv{
标题:对,
完成:功能(结果){
getDistTime(结果)。然后(finalRows=>downloadCSV(finalRows));
}
});
}//结束getData
函数getDistTime(资源){
变量行=[]
const promiseArr=[];
对于(var i=0;i非常感谢您的帮助,这非常有效。我把所有的东西都给你了!很高兴我能帮忙。值得注意的是,console.log以懒散的方式进行计算而臭名昭著,因此您无法始终保证它记录的内容与调用时实际存在的内容相同,这可能是您记录值但不向下载函数传递任何内容的原因-
function getData(){
var csv = document.getElementById('exampleFormControlFile1').files[0];
// Parse CSV string
Papa.parse(csv, {
header: true,
complete: function(results) {
getDistTime(results).then(finalRows => downloadCSV(finalRows));
}
});
} // end getData
function getDistTime(resources){
var rows = []
const promiseArr = [];
for (var i = 0; i < resources.data.length; i++) {
var origin1 = $("#citystate").val();;
var destinationA = resources.data[i]['DEMOBILIZATION CITY'] + ',' + resources.data[i]['DEMOBILIZATION STATE'];
promiseArr.push(googleRequest(origin1, destinationA));
}
return Promise.all(promiseArr)
.then((resultsArr) => {
resultsArr.forEach((result, i) =>
pushToRows(resources.data[i], result, rows)
);
return rows
})
} // end getDistTime