双箭头函数。怎么理解

Yangk
  • 541

今天看到这段代码,双箭头函数,我该怎么理解这段代码?
求大神指点下。

我还看了这篇帖子,还是有些细节没弄明白。

这个fn 到底是怎么定义的?怎么就成了回调函数(我现在的理解:f'n就是回调函数)?

const tasks = arr.map(c => (fn) => {
        return o.writer.publish('crawling_penalty_tasks', c, (e) => {
            if (e) {
                console.log('pub tasks error', c)
            } else {
                console.log('pub tasks success', c)
            }
            fn()
        })
    })
回复
阅读 1.8k
4 个回答
// 对你对代码进行拆分
const task = arr.map(c=>{
  return (fn)=>{
    return o.writer.publish('crawling_penalty_tasks',c,(e)=>{
       // if(){}else{} 这里省略...
       fn(); // 执行fn
    })
  }
})

// task 结构 [ fun1,fun2,... ]; 也就是说task中都是一个个的可执行函数
// task 中函数对结构
// 例如:
let fun1 = (fn)=>{
    return o.writer.publish('crawling_penalty_tasks',c,(e)=>{
       // if(){}else{} 这里省略...
       fn(); // 执行fn
    })    
}

// 所以 上面代码的执行流程如下:

// 1. 获取task 内部的函数
let index = 0; // 这个是角标
let t = task[index]; // t --> function 是一个函数

// 执行t
let res = t(()=>{
    // 这个地方,就是 上面 fn的执行 代码
})

// res--> o.writer.publish 是这个函数的返回
const tasks = arr.map(function (c) {
    var r = function (fn) {
        return o.writer.publish('crawling_penalty_tasks', c, (e) => {
            if (e) {
                console.log('pub tasks error', c)
            } else {
                console.log('pub tasks success', c)
            }
            fn()
        })
    }
    return r;
});

其实箭头函数转成普通函数,无非就是加function,并且减掉 =>

额,你把箭头函数调回成function不就清楚了。
这个tasks应该是一堆方法的数组,每个方法的参数是fn,这每个方法就是执行一堆东西,最后执行参数方法。

const tasks = arr.map((c) => {
        return (fn) => {
            return o.writer.publish('crawling_penalty_tasks', c, (e) => {
                if (e) {
                    console.log('pub tasks error', c)
                } else {
                    console.log('pub tasks success', c)
                }
                fn()
            })
        }
    });

用了es6的简写吧,去掉简写这样的

宣传栏