чтение двух CSV-файлов одновременно с обещаниями nodejs - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в обещаниях. Я хочу прочитать два CSV-файла одновременно, используя обещания. Как читать 2 CSV-файла параллельно, а затем перейти к цепочке. Я прошел через это , но они использовали библиотеку под названием RSVP. Может ли кто-нибудь помочь мне, как сделать это без использования каких-либо библиотечных функций. Я хочу читать 2 файла одновременно и должен иметь доступ к обоим файлам в следующих .then()?

file = require('fs')

// Reading file
let readFile =(filename)=>{
    return new Promise(function(resolve, reject){
        file.readFile(filename, 'utf8', function(err, data){
            if(err){
                reject(err)
            }else{
                resolve(data)
            }
        });
    });
}



// Get the match id for season 2016
getMatchId=(matches)=>{
    let allRows = matches.split(/\r?\n|\r/);
    let match_id = []
    for(let i=1; i<allRows.length-1; i++){
        let x = allRows[i].split(',')
        if(x[1] === '2016'){
            match_id.push(parseInt((x[0])))
        }
    }
    return match_id
}



//  Final calculation to get runs per team in 2016
getExtraRunsin2016=(deliveries, match_id)=>{
    let eachRow = deliveries.split(/\r?\n|\r/);
    result = {}
    let total = 0
    for(let i=1; i<eachRow.length-1;i++){
        let x = eachRow[i].split(',')
        let team_name = x[3]
        let runs = parseInt(x[16])
        let id = parseInt(x[0])
        if(match_id.indexOf(id)){
            total+=runs
            result[team_name] += runs
        }else{
            result[team_name] = 0
        }
    }
    console.log(result, total)
}



// Promise
readFile('fileOne.csv')
    .then((matchesFile)=>{
        return getMatchId(matchesFile)
    })
    .then((data)=>{
        readFile('fileTwo.csv')
        .then((deliveries)=>{
            getExtraRunsin2016(deliveries, data)
        })
    })
    .catch(err=>{
        console.log(err)
    })

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете Promise.all () комбинировать вещи без использования других библиотек

"use strict";

Promise.all([
  readFile('fileOne.csv'),
  readFile('fileTwo.csv'),
]).then((results) => {
  let [rawFileOneValues, rawFileTwoValues] = results;

  // Your other function to process them
}).catch(err => {
  console.log(err)
});
0 голосов
/ 03 мая 2018

Вы хотите использовать Promise.all().

// Promise
Promise.all([
  readFile('fileOne.csv').then(getMatchId),
  readFile('fileTwo.csv'),
])
  .then(([data, deliveries]) => getExtraRunsin2016(deliveries, data))
  .catch(err => console.log(err));

Я также рекомендую использовать fs-extra, который заменит вашу readFile реализацию.

...