异步回调JavaScript

时间:2014-05-20 16:29:17

标签: javascript asynchronous

我正在尝试解决我必须使用异步回调的JavaScript挑战。

以下是挑战所说的内容:

定义一个名为doS​​tuffAsync的函数,它接受一个参数回调。您的函数应该读取文件“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());
};

以下是挑战http://nathansjslessons.appspot.com/lesson?id=1085

的链接

1 个答案:

答案 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是设计用于帮助解决此问题的一种机制,我建议将其检出。