【发布时间】:2016-09-26 00:33:40
【问题描述】:
代码来自 IPFS(星际文件系统)HTTP API JS 实现:https://github.com/ipfs/js-ipfs-api/blob/master/src/api/add.js
'use strict'
const Wreck = require('wreck')
module.exports = (send) => {
return function add(files, opts, cb) {
if (typeof(opts) === 'function' && cb === undefined) {
cb = opts
opts = {}
}
if (typeof files === 'string' && files.startsWith('http')) {
return Wreck.request('GET', files, null, (err, res) => {
if (err) return cb(err)
send('add', null, opts, res, cb)
})
}
return send('add', null, opts, files, cb)
}
}
所描述的函数是add()函数,用于将数据推送到IPFS。
我将首先解释我所做的理解:add() 函数接受三个参数 - 如果没有 options 对象(用户省略了它)并且它已被替换为函数:用户试图实现一个回调函数——将回调更改为opts; cb = opts。
其次,如果引用的文件是文本文件 && 以 http 开头 - 它显然是远程托管的,我们需要使用 Wreck 获取它。
所有这些我都明白,但我们为什么要使用(send) => 箭头函数?为什么我们使用return function add...? send('add', null, opts, res, cb) 和 return send('add', null, opts, res, cb) 是干什么用的?回调(cb)是如何实现的?帮助我了解这里发生了什么
【问题讨论】:
-
这只是一个工厂函数,生产其他函数并在内部调用它们。模块不再需要,但有些人仍然坚持这种模式。
-
@ssube:它被用于进行依赖注入(
send是被注入的依赖)。模块如何使它变得不必要? (真正的问题。)
标签: javascript callback arrow-functions ipfs