2017-02-15 16 views
0

Я хочу написать вывод своего javascript в файл, используя fs. Но я заметил, что fs не работает, когда я положил fs.appendFile() внутри моего ec2.describeSpotFleetRequests(). Любой обходной путь для такого рода ситуаций?Напишите вывод console.log в файл - AWS Javascript SDK

Пример кода:

fs.appendFile('./spotfleet.txt', 'Hello world!', (err) => { 
    if (err) throw err; 
    console.log('It\'s saved!'); 
}); 

ec2.describeSpotFleetRequests(params,function(err, data) { 
    if (err) console.log(err, err.stack); 
    else { 
     for (var fleet in data.SpotFleetRequestConfigs) { 
      reqId = data.SpotFleetRequestConfigs[fleet].SpotFleetRequestId; // gets spot fleet ID 
      fs.appendFile('./spotfleet.txt', 'Hello world!', (err) => { 
       if (err) throw err; 
       console.log('It\'s saved!'); 
      }); 
     } 
    } 
}); 

Первый fs.appendFile будет написать "Привет, мир!" на spotfleet.txt, но второй fs.appendFile не запускался.

+0

использовать библиотеку потока управления [async] (https://caolan.github.io/async/), функции May, такие как 'async.series ([fn1, fn2, fn3], function() {})' могут помочь –

ответ

0

Как упоминалось в его ответе, fs.appendFile() является асинхронным, поэтому я не могу назвать его в цикле. Хорошо, что для синхронной версии есть fs.appendFileSync(). Почему я этого раньше не заметил, я не знаю.

0

Пробовал ли вы использовать некоторые внешние библиотеки, такие как winston? Он имеет встроенную поддержку для сохранения журналов в отдельный файл:

winston.add(winston.transports.File, { filename: 'spotfleet.txt' }) 

или сделать это с configure() вызова:

winston.configure({ 
    transports: [ 
    new (winston.transports.File)({ filename: 'spotfleet.txt' }) 
    ] 
}) 

Все бревна вы запускаемых с помощью, например:

winston.info('Hello world!') 

Будет сохранен в желаемый файл. Это более элегантно, чем console.log тоже ...

UPDATE:

Потому что вы изменяли вопрос с давая пример кода, я вижу, что проблема здесь.

fs.appendFile - асинхронный, поэтому вы не можете назвать это в цикле так, как вы это делали.

После выполнения одной операции fs.appendFile используйте обратный вызов, чтобы сохранить другую вещь.

+0

Спасибо. Я попробую использовать winston. Могу ли я вернуться к вам, если у меня возникнут проблемы? – Yvanne

+0

Конечно, не стесняйтесь :) – szymonm

+0

@Yvanne не могли бы вы принять мой ответ, если он правильный? :-) – szymonm