2015-05-18 3 views
1

Я перебор некоторых файлов:Проверьте, является ли текущий итерационный элемент последним?

files.forEach((file) => { 
    fs.readFile(__dirname + `/${input}/` + file, 'utf8', (err, data) => { 
     let result = `${data}\n` 

     if (err) { 
     console.log(err) 
     } 

     fs.appendFile("book.txt", result, (err) => { 
     if (err) { 
      console.log(err) 
     } else { 
      console.log(result) 
     } 
     }) 
    }) 
    }) 

То, что я хочу сделать сейчас что-то вроде:

// If this is the last file: 
    let result = `${data}` 

// else: 
    let result = `${data}\n` 

Есть ли способ, так что я могу проверить, если текущий элемент итерации является последним один?

ответ

2

Функция, которую вы передаете forEach(), будет вызываться с индексом текущего элемента во втором аргументе. Вы можете сравнить этот показатель с длиной массива и написать:

files.forEach((file, index) => { 
    if (index == files.length - 1) { 
     // This is the last file... 
    } 

    // [...] 

}); 
1

Вы можете использовать обещание и Array.join()

var promisify = require("promisify-node"); 
var fs = promisify("fs"); 
Promise.all(files.map((file) => { 
    return fs.readFile(__dirname + `/${input}/` + file, 'utf8') 
})).then((data) => { 
    var result = data.join('\n') 
    return fs.appendFile("book.txt", result); 
}).then((result) => { 
    console.log(result) 
}, (err) => { 
    console.log(err) 
}); 
Смежные вопросы