2017-04-12 2 views
0

Ich verwende Filewalker, um durch ein Verzeichnis zu traversieren. Ich möchte jedoch für jede Datei eine asynchrone Operation durchführen. Wie stelle ich sicher, dass done nur ausgelöst wird, nachdem alle Vorgänge abgeschlossen sind?Async-Vorgang für jede Datei mit npm filewalker

filewalker('.') 
    .on('file', function(p, s) { 
    processAsync(p); 
    }) 
    .on('done', function() { 
    console.log('All files have been processed'); 
    }) 
.walk(); 

Antwort

1

Als on Datei Veranstaltung bietet keinen Rückruf param, Dateien Array erstellen und jede Datei, um es hinzuzufügen. Dann auf Dateiwalker done Ereignis Verwendung async Modul, um jede Datei asynchron zu verarbeiten.

var filewalker = require('filewalker'); 
var async = require('async') 

function fileAsyncFunc (file, cb) { 
    setTimeout(function() { 
    console.log('file processed asynchronously') 
    cb() 
    }, 100) 
} 

function doneProcessingFiles (err) { 
    if (err) { 
    return console.error(err) 
    } 
    console.log('done processing files asynchronously') 
} 

const files = [] 
filewalker('./node_modules/filewalker') 
    .on('file', function(p, s) { 
    // add file to files array 
    files.push({p,s}) 
    }) 
    .on('done', function() { 
    // call async functions to each file 
    async.each(files, fileAsyncFunc, doneProcessingFiles) 
    }) 
.walk(); 
+0

Ja, das mache ich gerade. Ich habe mich gefragt, ob es einen anderen Weg gibt, es zu tun. Vielen Dank für Ihre Antwort :) – Shrihari

Verwandte Themen