Javascript 迭代papa.parse对象的结果

Javascript 迭代papa.parse对象的结果,javascript,promise,es6-promise,papaparse,Javascript,Promise,Es6 Promise,Papaparse,我相信这可能是async或Promissions的问题,然而,这个概念一直是我难以理解的。我已经花了很多时间研究了一些与承诺和承诺相关的问题,但我相信我仍然没有掌握一些简单的概念 概述 在下面的代码中,从用户处收集.csv文件,使用PapaParse将其转换为对象,然后将距离/持续时间值添加到GoogleMaps距离矩阵中的数据中,最后,目的是将此数据作为包含此组合信息的.csv返回给用户 在downloadcv()中,我能够记录由getDistTime生成的对象。但是,我无法迭代此对象或将其发

我相信这可能是async或Promissions的问题,然而,这个概念一直是我难以理解的。我已经花了很多时间研究了一些与承诺和承诺相关的问题,但我相信我仍然没有掌握一些简单的概念

概述 在下面的代码中,从用户处收集
.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{ resultsArr.forEach((result,i)=> pushToRows(resources.data[i],结果,行) ); 返回行 }) }//结束getDistTime
非常感谢您的帮助,这非常有效。我把所有的东西都给你了!很高兴我能帮忙。值得注意的是,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