您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Web开发 >> (node.js)NodeJS:用generic flow control来解决boomerang效应的疑惑

(node.js)NodeJS:用generic flow control来解决boomerang效应的疑惑

来源:网络整理     时间:2016/5/27 1:37:02     关键词:boomerang,control

关于网友提出的“(node.js)NodeJS:用generic flow control来解决boomerang效应的疑惑”问题疑问,本网通过在网上对“(node.js)NodeJS:用generic flow control来解决boomerang效应的疑惑”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:(node.js)NodeJS:用generic flow control来解决boomerang效应的疑惑
描述:

这段代码是在node高级编程19章Listing 19-3,cascade function 看不明白,能帮忙给解释下吗?

var fs = require('fs');
function cascade(callbacks, callback) {
// clone the array
    var functions = callbacks.slice(0);
    function processNext(err) {
        if (err) {
            return callback(err);
        }
        var args = Array.prototype.slice.call(arguments);
        var func = functions.shift();
        if (func) {
            // remove first argument containing the error
            args.shift();
        } else {
            func = callback;
        }
        args.push(processNext);
        func.apply(this, args);
    }
    processNext.call(this);
}
function append_some_a_to_b(callback) {
    var aFd, bFd,
        buffer = new Buffer(10);
    cascade([
        function open_a(next) {
            fs.open(__dirname + '/a.txt', 'r', next);
        },
        function read_from_a(fd, next) {
            aFd = fd;
            fs.read(aFd, buffer, 0, buffer.length, 0, next);
        },
        function close_a(bytesRead, buf, next) {
            fs.close(aFd, next);
        },
        function open_b(next) {
            fs.open(__dirname + '/b.txt', 'a', next);
        },
        function stat_b(fd, next) {
            bFd = fd;
            fs.fstat(bFd, next);
        },
        function write_b(bStats, next) {
            fs.write(bFd, buffer, 0, buffer.length, bStats.size, next);
        },
        function close_b(bytesWritten, buf, next) {
            fs.close(bFd, next);
        }
    ], callback);
};
console.log('starting...');
append_some_a_to_b(function done(err) {
    if (err) {
        throw err;
    }
    console.log('done');
});

谢谢各位了!


解决方案1:

cascade 函数做的, 就是把下面的每个函数, 按序依次执行, 并仅在异步任务完成后执行下一个函数, 外加错误处理.


以上介绍了“(node.js)NodeJS:用generic flow control来解决boomerang效应的疑惑”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1329084.html

相关图片

相关文章