亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

NodeJS:異步從循環中的多個 TSV 文件返回數據

NodeJS:異步從循環中的多個 TSV 文件返回數據

慕妹3146593 2024-01-18 16:54:06
我正在嘗試將 TSV 數據讀入數組,并且該async函數可以很好地加載行,但是rows.push(row)當我嘗試獲取函數外部的行時,仍然會延遲。有沒有辦法獲取行數據以供在此函數之外使用?我已經嘗試過承諾,但似乎它們仍然需要位于異步函數中。我正在循環訪問多個文件并讀取每個文件的數據,并且我需要等到所有數據加載完畢才能繼續,所以我認為將其他所有內容包裝在回調中是沒有意義的......const csvToJson = require("csvtojson");var rows = [];const getRows = async (fileName) => {    const csvData = await csvToJson({      delimiter: "\t",      trim: true    }).fromFile(fileName);    csvData.forEach((row) => {      rows.push(row);    });    return rows;};getRows("myfile.tsv");console.log(rows.length);  // prints 0setTimeout(function() {  console.log(rows.length);}, 2000);                  // prints expected num of rows// do something else with rowsdoSomething(rows);或者,使用回調,但我得到一個待處理的承諾作為回報。我知道我可以用 來解決它then,但這對我之外的我沒有幫助then。const getRows = async (callback, fileName) => {    const csvData = await csvToJson({      delimiter: "\t",      trim: true    }).fromFile(fileName);    let rows = [];    csvData.forEach((row) => {      rows.push(row);    });    return callback(rows);};// returns a pending promisevar csvData = getRows(rows => {  console.log("Rows in callback: " + rows.length);     // expected length  return rows;}, "myfile.tsv");// do something else with datadoSomething(csvData);
查看完整描述

3 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

答案只是將函數包裝在 async 中并使用await. 我猜你無法在async??之外獲取此數據


async function getTableDetails(paths, rowStart = 2) {

  let tables = {};

  for (var i = 0; i < paths.length; i++) {

    let p = paths[i];

    const getRows = async (fileName) => {

        const csvData = await csvToJson({

          delimiter: "\t",

          trim: true

        }).fromFile(fileName);

        return csvData;

    };

    let rows = await getRows(p);

    tables[p] = { rows: rows };

  }

  return tables;

}


(async function test() {

  let tableDetails = await getTableDetails(fps, rowStart=2);

  console.log(Object.keys(tableDetails));

  doSomething(tableDetails);

})();


查看完整回答
反對 回復 2024-01-18
?
森林海

TA貢獻2011條經驗 獲得超2個贊

嘗試這個


const csvToJson = require("csvtojson");


const getRows = async (fileName) => {

    const csvData = await csvToJson({

      delimiter: "\t",

      trim: true

    }).fromFile(fileName);

    return csvData;

};


getRows("myfile.tsv").then(data=>{

  console.log(data.length); 

  }

)



查看完整回答
反對 回復 2024-01-18
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

你可以這樣做


const csvToJson = require("csvtojson");


const getRows = async (fileName) => {

  const csvData = await csvToJson({

    delimiter: "\t",

    trim: true

  }).fromFile(fileName);


  const rows = [];

  csvData.forEach((row) => {

    rows.push(row);

  });


  return rows;

};


getRows("myfile.tsv").then((rows) => {

  console.log(rows.length);

});


查看完整回答
反對 回復 2024-01-18
  • 3 回答
  • 0 關注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號