代码来自 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) 是如何实现的?帮助我了解这里发生了什么