【发布时间】:2014-08-02 01:35:37
【问题描述】:
我绞尽脑汁想弄清楚如何排序/放置回调以获得我需要的东西。
我有一个循环来检查文件是否存在。我希望它在完成后回调,但 for 循环和回调在“fs.open”完成之前完成......典型的异步问题。
我正在使用 node v0.10.29、express v3.14.0,并且正在考虑使用“async”库,但同样,只是无法弄清楚我需要的逻辑......
这是我所拥有的:
输入
function checkForAllFiles(callback)
{
var requiredFiles = [];
requiredFiles[requiredFiles.length] = "../Client/database/one.js";
requiredFiles[requiredFiles.length] = "../Client/database/two.dat";
requiredFiles[requiredFiles.length] = "../Client/database/three.xml";
requiredFiles[requiredFiles.length] = "../Client/database/four.dat";
requiredFiles[requiredFiles.length] = "../Client/database/five.dat";
requiredFiles[requiredFiles.length] = "../Client/database/six.xml";
var missingFiles = [];
for(var r=0; r<requiredFiles.length; r++)
{
fs.open(requiredFiles[r], 'r', function(err, fd){
if(err)
{
missingFiles[missingFiles.length] = err.path;
console.log("found missing file = ", err.path);
}
});
console.log("r = ", r);
}
console.log("sending callback: ", missingFiles);
callback(missingFiles);
}
输出
0
1
2
3
4
5
sending callback: []
found missing file: ../Client/database/three.xml
期望的输出
0
1
found missing file: ../Client/database/three.xml
2
3
4
5
sending callback: ["../Client/database/three.xml"]
【问题讨论】:
-
为了好玩,您可以使用
Array.push()方法将项目添加到您的requriedFiles数组:例如requiredFiles.push("../Client/database/one.js"); -
会的! ;D 我试试看
标签: javascript node.js asynchronous