Эта крошечная программа Javascript возвращает sha256 ha sh своего текста.
const shasum = require('crypto').createHash('sha256');
const stream = require('fs').createReadStream(__filename);
stream.on('error', function() { console.log('Error.'); });
stream.on('data', function (chunk) { shasum.update(chunk); }); /* <--- data line */
stream.on('end', function() {
const sha = shasum.digest('base64');
console.log(`The sha is ${sha}`);
});
Выполненная с Nodejs эрбием, она работает должным образом.
Однако после Написав его, я подумал, что выражение функции не нужно, и поэтому я изменил data line
следующим:
stream.on('data', shasum.update);
И он вылетает с ужасным сообщением об ошибке c:
if (state[kFinalized])
^
TypeError: Cannot read property 'Symbol(kFinalized)' of undefined
at ReadStream.update (internal/crypto/hash.js:78:12)
at ReadStream.emit (events.js:311:20)
at addChunk (_stream_readable.js:294:12)
at readableAddChunk (_stream_readable.js:275:11)
at ReadStream.Readable.push (_stream_readable.js:209:10)
at internal/fs/streams.js:210:12
at FSReqCallback.wrapper [as oncomplete] (fs.js:487:5)
Javascript очень гибок с вызовами функций, но согласно документации вызов stream.on data
должен передавать только один параметр.
Почему поведение отличается?