xmlファイルが圧縮されたzipファイルを展開して、展開されたxmlをjsonファイルにしたいです。
以下のライブラリを使用しました
https://www.npmjs.com/package/unzip
https://www.npmjs.com/package/xml2json
js
1'use strict'; 2 3let fs = require('fs') 4let unzip = require('unzip') 5let parser = require('xml2json'); 6 7let originalFilePath = process.argv[2]; 8 9let XMLFileName = originalFilePath.replace(/^.*[\/]/, '').replace('.zip', '') 10let XMLFileDirectory = '/users/*****/desktop/templatexml/' + XMLFileName + '/' 11let XMLFilePath = '/users/*****/desktop/templatexml/' + XMLFileName + '/doc.xml' 12 13let jsonFilePath = '/users/*****/desktop/templatexml/' + XMLFileName + '/doc.json' 14 15convertToXML(originalFilePath).then(() => { 16 let XMLFileData = fs.readFileSync(XMLFilePath, 'utf-8') 17 let jsonData = parser.toJson(XMLFileData) 18 createJson(jsonData) 19}) 20 21function convertToXML(filePath) { 22 return new Promise(function(filePath) { 23 fs.createReadStream(filePath).pipe(unzip.Extract({ path: XMLFileDirectory })) 24 }); 25} 26 27function createJson(jsonData) { 28 fs.writeFile(jsonFilePath, JSON.stringify(jsonData, null, ' ')) 29}
もともと、promiseは使っておらず、
convertToXML
createJson
とただ単に順番に書いていたのですが、そうすると、すでに解凍されたxmlファイルがないとjsonを作れなかったので、promiseを使ってみました
しかしpromiseの使い方が間違ってるのか
DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
とエラーが出てしまいます
どうすればいいでしょうか
追記
javascript
1convertToXML(originalFilePath).then(() => { console.log("success") }, () => { console.log("failure") })
このようにすると、failureって出ます。
しかし
js
1convertToXML(originalFilePath) 2 3function convertToXML(filePath) { 4 fs.createReadStream(filePath).pipe(unzip.Extract({ path: XMLFileDirectory })) 5}
これだけだと普通にできるので、
return new Promise のところが何か間違ってるみたいです
追記
回答を参考に色々と試してみたのですが、
js
1function convertToXML(filePath) { 2 3 return new Promise((resolve, reject) => { 4 fs.createReadStream(filePath).pipe(unzip.Extract({ path: XMLFileDirectory })).on("end", resolve(createJson())).on("error", reject(() => { console.log("error") })) 5 }) 6 7}
これで以下のエラーが出てしまいました。
これはxmlファイルが生成されてないからでしょうか
DeprecationWarning: Calling an asynchronous function without callback is deprecated.
js
1return new Promise((resolve, reject) => { 2 fs.createReadStream(filePath).pipe(unzip.Extract({ path: XMLFileDirectory })).on("end", resolve(console.log("success"))).on("error", reject(() => { console.log("error") })) 3 })
createJsonをconsole.log("success")にすると、successと出てくれますのでそうゆうことなのかなと。
resolveじゃなくてthenで書いた場合も同じエラーが出ます...。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/10/15 08:31
2018/10/15 08:48
退会済みユーザー
2018/10/15 09:02