【发布时间】:2017-05-03 13:20:04
【问题描述】:
我现在有一个处理统计和哈希(可能很大)文件的过程。现在我正在这样做:
function gen_hash (fn, callback) {
var hash = crypto.createHash('sha256');
var fh = fs.createReadStream(fn);
fh.on('data', d => hash.update(d));
fh.on('end', () => {
var digest = hash.digest('hex');
});
}
function gen_stat (fn, callback) {
fs.stat(fn, function (err, stats) {
if (err) {
if (err.code == "ENOENT") {
file.exists = false;
}
}
}
}
然后我有一些代码允许在它们都完成时进行回调。您可以想象,它相当...参与。
我觉得这和 Promises 很匹配,但是我不知道怎么用。
我尝试了一些类似的东西:
const Promises = require('bluebird');
const fs = Promises.promisifyAll(require('fs'));
fh = fs.createReadStream(fn)
.then...
.error...
但我实际上并不明白在这里做什么,而且 Bluebird 网站似乎缺乏细节。
我觉得像Promise.all 这样的东西可能是正确的,但我只是没有看到任何正确语法的好例子。
我知道我可以编写一个包装函数,在各种条件下返回一个承诺,但我不太明白它在承诺领域是如何工作的。也许是这样的?
const fs = Promise.promisifyAll(require('fs'));
function promise_checksum (fn) {
return new Promise((fulfill, reject) => {
// What goes here...?
}
}
function promise_stat (fn) {
return new Promise((fulfill, reject) => {
fs.stat(fn).then((err, stats) => {
if (err) {
reject(err);
} else {
fulfill(stats);
}
}
}
}
function checksum_and_stat (fn) {
return new PromiseAll((fulfill, reject) => {
// What goes here?
});
}
帮助?
【问题讨论】:
标签: node.js file stream promise es6-promise