「いまどきのJSプログラマーのためのNode.jsとReactアプリケーション」のサンプルコードのバグ。その2

「いまどきのJSプログラマーのためのNode.jsとReactアプリケーション」のサンプルコードを動かそうと思ったら動かなかった所があったのでメモ。その2。

 

「6章 03 機械学習で手書き文字を判定しよう」のコード、

「1-download.js」を実行すると、ファイルをダウンロードし終わるタイミングでエラーになってしまう事があるもよう。

 

↓以下の部分。

// ファイルのダウンロードを行う関数を定義 --- (※3)
function downloadPromise (url, savepath) {
  return new Promise*1 return resolve()
      const outfile = fs.createWriteStream(savepath)

      http.get(url, (res) => {

        res.pipe(outfile)
        res.on('end', () => {

          outfile.close() → ここをoutfile.end() にすると良いらしい。

          resolve()

        })

      })

      .on('error', (err) => reject(err))

    })
}

 

ファイルへの書き込みが終わらないうちにclose()を呼び出すとエラーになるようです。

 

*1:resolve, reject) => {

    const http = require('http')
    const fs = require('fs')
    if (fs.existsSync(savepath