2
我開始學習JavaScript承諾,但我無法理解如何將Q函數應用於Node.js回調函數。在示例中使用承諾和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');
怎麼寫承諾使用此代碼(與Q或其他庫)?
你可以看看我的要點,它使用非常相似的任務,它是用Q https://gist.github.com/riston/9022931寫的。 –