为了账号安全,请及时绑定邮箱和手机立即绑定

求异步大神分析一下这段代码的几个callback分别代表什么意思

求异步大神分析一下这段代码的几个callback分别代表什么意思

30秒到达战场 2018-11-15 14:19:19
看着头晕,一个异步模块开源项目的代码,回调有点绕,都理不清各自的callback了,异步大神帮忙分析一下这段代码。
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

const fs = require('fs')


const files = ['./file/1.js', './file/2.js', './file/3.js']


function series(tasks, callback) {

        // 1.参数有 callback 的话就取 callback 没有就赋值一个空函数

    callback = callback || function() {}

    let results = Array.isArray(tasks) ? [] : {}


    eachOfSeries(tasks, function(task, key, callback) {

        task(function(err, data) {

            results[key] = data 

            // 调用eachOfSeries里面的 callback 把 err 作为参数

            callback(err)

        })

    }, function(err) { 

            // 调用1的上面callback 把 err,results 作为参数

        callback(err, results) 

    })

}



series([function(callback) {

    fs.access('./file/1.js', function(err) {

            // 数组第一个函数的参数 callback

        callback(null, err ? false : true)

    });

}, function(callback) {

    fs.readFile('./file/2.js', function(err, data) {

            // 数组第二个函数的参数 callback

        callback(err, data)

    });

}], function(err, results) {

    if (err) {

        throw err;

    }

    console.log(results);

});



function eachOfSeries(arr, fn, callback) {

        // 2.参数有 callback 的话就取 callback 没有就赋值一个空函数

    callback = callback || function() {}

    arr = arr || []


    let i = -1

    let sync = true

    next()


    function next() {

        sync = true


        if (++i == arr.length) {

            return callback()

        }

        fn(arr[i], i, once(done))


        sync = false

    }


    function done(err) {

        if (err) {

                // 返回 第二个 callback

            return callback(err)

        }

        if (sync) {

            setImmediate(next)

        } else {

            next()

        }

    }


    function once(fn) {

        return function() {

            if (!fn) {

                return

            }

            fn.apply(this, arguments)

            fn = null

        }

    }

}


查看完整回答
反对 回复 2018-12-19
  • 1 回答
  • 0 关注
  • 570 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信