这段代码中的箭头函数在做什么?
What's the arrow-function doing in this code?
代码来自IPFS(Inter-planetary file-system)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
)是如何实现的?帮助我了解这里发生的事情
导出的整个东西是一个函数,它需要send
作为参数;这让调用代码通过传入要使用的 send
函数来进行依赖注入。它期望像这样使用:
let addBuilder = require("add");
let add = addBuilder(senderFunction);
// This function ----^
// is `send` in the `add.js` file.
// It does the actual work of sending the command
// Then being used:
add(someFiles, someOptions, () => {
// This is the add callback, which is `cb` in the `add.js` file
});
(通常,上面的前两个语句写成一个语句,例如let add = require("add")(senderFunction);
)
基本上,整个事情是一个大型构建器,用于使用给定 send
函数的东西,通过调用构建器将其注入其中。这样,它可以通过注入 send
的测试版本进行测试,并通过注入 send
的真实版本来用于真实; and/or send
的各种 "real" 版本可用于不同的环境、传输机制等
代码来自IPFS(Inter-planetary file-system)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
)是如何实现的?帮助我了解这里发生的事情
导出的整个东西是一个函数,它需要send
作为参数;这让调用代码通过传入要使用的 send
函数来进行依赖注入。它期望像这样使用:
let addBuilder = require("add");
let add = addBuilder(senderFunction);
// This function ----^
// is `send` in the `add.js` file.
// It does the actual work of sending the command
// Then being used:
add(someFiles, someOptions, () => {
// This is the add callback, which is `cb` in the `add.js` file
});
(通常,上面的前两个语句写成一个语句,例如let add = require("add")(senderFunction);
)
基本上,整个事情是一个大型构建器,用于使用给定 send
函数的东西,通过调用构建器将其注入其中。这样,它可以通过注入 send
的测试版本进行测试,并通过注入 send
的真实版本来用于真实; and/or send
的各种 "real" 版本可用于不同的环境、传输机制等