我正在尝试解决我必须使用异步回调的JavaScript挑战。
以下是挑战所说的内容:
定义一个名为doStuffAsync的函数,它接受一个参数回调。您的函数应该读取文件“passwords”的内容,将结果写入文件“world.txt”以及额外的文本“OWNED”,然后调用不带参数的回调。同时使用异步readAsync和异步writeAsync。
我的代码如下:
var files = { "passwords": "abc,def",
"world.txt": "hello" };
var readAsync = function(file, callback) {
callback(files[file]);
};
var writeAsync = function (file, contents, callback) {
files[file] = contents;
callback();
};
var test = function() {
files["out.txt"] = "final";
files["passwords"] = "blank";
};
//this is the part I'm interested in
var doStuffAsync = function (callback) {
var contents = 0;
contents = readAsync("passwords");
writeAsync("world.txt", contents, callback());
};
的链接
答案 0 :(得分:3)
使用回调实现此目的最直接的方法是嵌套函数调用,如下所示:
function doStuffAsync(callback) {
readAsync("passwords", function(contents) {
writeAsync("world.txt", contents + "OWNED", function() {
callback();
});
});
}
在这种情况下,由于你的回调函数不需要任何参数,你可以保存一级嵌套,只需这样做:
function doStuffAsync(callback) {
readAsync("passwords", function(contents) {
writeAsync("world.txt", contents + "OWNED", callback);
});
}
只有两个回调操作,这并不是那么糟糕,但是当你需要按顺序执行大量异步步骤时,它会很快变得非常混乱。 Promises是设计用于帮助解决此问题的一种机制,我建议将其检出。