【发布时间】:2014-03-12 09:09:01
【问题描述】:
我试图理解 Node.js 的异步编程,但在这段代码上停滞不前。
回调函数中的这个函数返回一个目录中的文件数组:
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 result = [];
files.forEach(function (filename, index) {
result[index] = filename;
});
return callback(result);
});
}
});
}
但是当我在.forEach 内部使用异步代码时,它什么也没有返回:
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 result = [];
files.forEach(function (filename, index) {
fs.stat(path + filename, function (err, stats) {
if (err) {
throw err;
}
result[index] = filename;
});
});
return callback(result);
});
}
});
}
我明白为什么会这样,但不明白如何编写正确的代码。
【问题讨论】:
-
不能从异步函数返回,必须设置回调
-
这个模块会让你的生活更轻松:github.com/caolan/async
-
回调或承诺/延迟模式是您的选择。
-
问题是
fs.stat也是异步的。 -
@PaulS。他的代码中已经有一个
callback,但被滥用了。
标签: javascript node.js asynchronous foreach