1
我已经写在node.js中运行下面的JavaScript代码:有没有办法同步等待在Javascript中完成递归异步函数?
const fs = require("fs");
const path = require("path");
var copy = function(paramSource, paramDestination, paramCallback) {
if (fs.existsSync(paramDestination)) {
return paramCallback("Destination Exists"); //TODO make formal error code
} else {
fs.lstat(paramSource, function(error, sourceStats) {
if (error) {
return paramCallback(error);
} else {
if (sourceStats.isDirectory()) {
fs.readdir(paramSource, function(error, sourceContents) {
if (error) {
return paramCallback(error);
} else {
fs.mkdir(paramDestination, sourceStats.mode, function(error) {
if (error) {
paramCallback(error);
} else {
if (sourceContents.length > 0) {
sourceContents.forEach(function(sourceChild) {
copy(path.join(paramSource, sourceChild), path.join(paramDestination, sourceChild), paramCallback);
});
}
return paramCallback(null, paramDestination);
}
});
}
});
} else {
var sourceFile = fs.createReadStream(paramSource);
var destinationFile = fs.createWriteStream(paramDestination); //TODO permissions
sourceFile.on("error", function(error) {
return paramCallback(error);
});
destinationFile.on("error", function(error) {
return paramCallback(error);
});
sourceFile.on("close", function() {
//return paramCallback(null, paramSource);
});
destinationFile.on("close", function() {
return paramCallback(null, paramDestination);
});
sourceFile.pipe(destinationFile);
}
}
});
}
};
var entities = 0;
copy("/home/fatalkeystroke/testing/directory_01", "/home/fatalkeystroke/testing/directory_01_copy", function(error, name) {
if (error) {
console.log(error);
} else {
console.log(name);
entities++;
}
});
console.log("Copied " + entities + " entities.");
console.log("Program Done.");
这是一个从我工作的一个应用程序测试exerpt。我想保持copy()函数的异步性质,但是我也想知道完整副本何时完成的方式(因为与entities
相关的代码暗示)。理由是因为我希望能够告诉我们什么时候完成了,但是还要实现进度跟踪功能。
有没有办法同步等待在Javascript中完成递归异步函数?
没有,但异步/ AWAIT语法可以使你的代码看起来好像你。 – pvg
“同步等待完成异步功能”是什么意思?这不是'paramCallback'的目的吗? – guest271314
想了一会儿,你会意识到这是多么不可能:p –