gpt4 book ai didi

javascript - 文件的同步散列函数

转载 作者:搜寻专家 更新时间:2023-11-01 00:18:08 25 4
gpt4 key购买 nike

我有一个为给定路径生成校验和的函数

function getHash(path) {
var fs = require('fs');
var crypto = require('crypto');

var fd = fs.createReadStream(path);
var hash = crypto.createHash('sha1');
hash.setEncoding('hex');

fd.on('end', function () {
hash.end();
// *** Here is my problem ***
console.log(hash.read());
});

fd.pipe(hash);
};

我想调用 calcNewHash 函数以便它返回散列,问题是,我还没有找到它的异步版本,也许有人可以提供帮助。

只是添加一个return语句是行不通的,因为这个函数在一个Listener中

稍后我想将校验和添加到一个对象中,这样我就可以将它的引用作为参数给出,但这仍然不会改变这是异步的......

最佳答案

你基本上有 2 个解决方案:

#1 使用 promise (即 q - npm install q --save)

function getHash(path) {
var Q = require('q');
var fs = require('fs');
var crypto = require('crypto');

var deferred = Q.defer();

var fd = fs.createReadStream(path);
var hash = crypto.createHash('sha1');
hash.setEncoding('hex');

fd.on('end', function () {
hash.end();
// *** Here is my problem ***
console.log(hash.read());
deferred.resolve(hash.read());
});

fd.pipe(hash);

return deferred.promise;
};

getHash('c:\\')
.then(function(result) {
// do something with the hash result
});

#2 或者使用回调函数

function getHash(path, cb) {
var fs = require('fs');
var crypto = require('crypto');

var fd = fs.createReadStream(path);
var hash = crypto.createHash('sha1');
hash.setEncoding('hex');

fd.on('end', function () {
hash.end();
// *** Here is my problem ***
console.log(hash.read());
if (cb) {
cb(null, hash.read());
}
});

fd.pipe(hash);
};

getHash('C:\\', function (error, data) {
if (!error) {
// do something with data
}
});

如果您在回调函数中没有深度嵌套,我会选择选项 #2。

(注意:在幕后 promises 也使用回调,如果你有深层嵌套,它只是一个“更干净”的解决方案)

关于javascript - 文件的同步散列函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27943166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com