0

endコーヒースクリプトのストリームによってイベントが発生したときにコールバックを実行しようとしています。コードを実行しようとすると、次のエラーが表示されます。

C:\Users\Gum-Joe\Documents\Projects\retisci\lib\downloader.js:45
    callback();
    ^

TypeError: callback is not a function
  at Request.<anonymous> (C:\Users\Gum-Joe\Documents\Projects\retisci\lib\downloader.js:45:5)
  at emitOne (events.js:101:20)
  at Request.emit (events.js:188:7)
  at IncomingMessage.<anonymous> (C:\Users\Gum-Joe\Documents\Projects\retisci\node_modules\request\request.js:988:12)
  at emitNone (events.js:91:20)
  at IncomingMessage.emit (events.js:185:7)
  at endReadableNT (_stream_readable.js:926:12)
  at _combinedTickCallback (internal/process/next_tick.js:74:11)
  at process._tickCallback (internal/process/next_tick.js:98:9)

注:私の氏名を保護するために出力を修正しました。

これが私のコードです:

###
# Downloader
# @param url {String} url to GET
# @param save {String} Save file
# @param options {Object} Options
# @param callback {Function} Callback
###
downloader.get = (url, save, options, logger_options, callback) ->
  log = require('single-line-log').stdout
  # Download
  # Logger
  logger = new Logger('retis', logger_options)
  # File stream
  file_stream = fs.createWriteStream(save)
  log("#{"[retis INFO]".green} Downloading #{url}...0% at 0 kb/sec...\n")
  progress(request(url))
    .on('progress', (state) ->
      percent = "#{Math.floor(state.percentage * 100)}% [#{Math.round(state.size.transferred / 1024)} kb of #{Math.round(state.size.total / 1024)} kb]"
      log("#{"[retis INFO]".green} Downloading #{url}...#{percent} at #{Math.round(state.speed / 1024)} kb/sec...\n")
    )
    .on('data', (d) ->
      file_stream.write d
      return
    )
    .on 'error', (e) ->
      callback(e)
      return
    .on 'end', () ->
      log("#{"[retis INFO]".green} Downloading #{url}...100%\n")
      logger.info("Downloaded #{url}.\n")
      # This is what causes the error
      callback()
      return
  return

関数の開始時にコールバックを実行すると機能し、関数の最後に実行すると機能しますが、endイベントのコールバックで実行すると機能しません。

誰かが私のコードでこのバグを修正する方法を提案してもらえますか?

注:すべてのコードは、https://github.com/jakhu/retis-ciの src/downloader.coffee ファイルにあります。このバグが関連している場合は、他のファイルを参照してください。

4

1 に答える 1

0

unpacker.coffee ファイルの 56 行目で、予想よりも 1 つ少ないパラメータで get メソッドを呼び出しています。

get(data.url, file_save, @download_options, (err) ->

正しいメソッド シグネチャは次のようになります。

get(url, save, options, logger_options, callback)

もちろん、それは最後のパラメータ(コールバック)が未定義になることにつながります。

于 2016-05-09T11:59:18.570 に答える