2016-07-10 2 views
0

Очевидно, что я делаю что-то неправильно здесь, но я этого не вижу.rs.readFile в async.series проблема секвенирования

Я уменьшил свой код до нижнего, чтобы проиллюстрировать проблему, которую я имею.

Использование async.series Я обрабатываю набор файлов. для каждого файла я читал его и делал что-то с содержимым и двигался дальше. Если я изменю вызов readFile на readFileSync, я получаю ожидаемый результат, но это не решение, которое будет работать здесь по ряду других причин.

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

huh(); 

function huh() { 
    for (var i in [1,2]) { 
     async.series([ 
       function (callback) { process('a', callback); }, 
       function (callback) { process('b', callback); } 
      ], function() { console.log('series done')}); 
     console.log('done: ' + i); 
    } 
} 

function process(word, callback){ 
    fs.readFile('whatever', function (err, content) { 
     console.log(word); 
     callback(); 
    }); 
} 

Что ожидать, когда я бегу выше:

a 
b 
series done 
done: 0 
a 
b 
series done 
done: 1 

Но то, что я получаю

done: 0 
done: 1 
a 
a 
b 
series done 
b 
series done 

Что я делаю неправильно?

+0

console.log ('сделано:' + я); синхронизация так, во-первых, нет ничего плохого, что вы ожидаете от fs.readFileSync, используйте код синхронизации для соответствия вашему ожиданию –

+0

, к сожалению, как я отмечаю в вопросе, я не могу использовать fs.readFileSync –

+0

ok, а затем положить все в async.series, я подробно расскажу –

ответ

0

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

 
huh(); 
 

 
function huh() { 
 
    var queue = []; 
 
    for (var i in [1, 2]) { 
 
    (function(tmpi) { 
 
     queue.push(function(callback) { 
 
     process('a', callback); 
 
     }); 
 
     queue.push(function(callback) { 
 
     process('b', callback); 
 
     }); 
 
     queue.push(function(callback) { 
 
     console.log('series done'); 
 
     callback() 
 
     }); 
 
     queue.push(function(callback) { 
 
     console.log('done: ' + tmpi); 
 
     callback() 
 
     }); 
 

 
    })(i); 
 

 

 

 

 
    } 
 
    async.series(queue, function() { 
 
    console.log('all done!') 
 
    }); 
 

 
} 
 

 
function process(word, callback) { 
 
    fs.readFile('whatever', function(err, content) { 
 
    console.log(word); 
 
    callback(); 
 
    }); 
 
}

Смежные вопросы