【发布时间】:2014-02-18 22:18:12
【问题描述】:
我开始学习 JavaScript 承诺,但我不明白如何将 Q 函数应用到 Node.js 回调函数。
In similar question 建议使用Q.denodeify(),但它适用于fs.readFile(),不适用于fs.exists()。
这是一个简单的函数,它返回目录中的文件列表及其大小:
function openDir(path, callback) {
path = __dirname + path;
fs.exists(path, function (exists) {
if (exists) {
fs.readdir(path, function (err, files) {
if (err) {
throw err;
}
var filesCounter = 0,
filesTotal = files.length,
result = [];
files.forEach(function (filename, index) {
fs.stat(path + filename, function (err, stats) {
if (err) {
throw err;
}
result[index] = {};
result[index].name = filename;
result[index].size = stats.size;
if (++filesCounter === filesTotal) {
callback(result);
}
});
});
});
}
});
}
http.createServer(function (req, res) {
openDir('/', function (data) {
res.writeHead(200, {
'Content-Type': 'application/json; charset=utf-8'
});
res.end(JSON.stringify(data));
});
}).listen(1337, '127.0.0.1');
如何使用 Promise 编写此代码(使用 Q 或其他库)?
【问题讨论】:
-
你可以看看我的 gist,它使用非常相似的任务,它是用 Q gist.github.com/riston/9022931 编写的。
标签: javascript node.js promise q