我的文件夹中有两个文件 - index.jsutil.js他们的代码库如下

Util.js

let obj = {} 
obj.sendTransaction = () => { 
  console.log(arguments); 
  return new Promise((resolve, reject) => { 
    // try { 
    //   let data = ethFunction.call() 
    //   resolve(data) 
    // } catch (e) { 
    //   reject(e) 
    // } 
  }); 
} 
module.exports = obj 

Index.js ,如果我将参数传递给 addNewParticipant或其变体,那么它们不会出现在 util.js 中的参数对象中,例如

const addNewParticipant = (foo, bar) => { 
  var ethFunction = myContract.addParticipant.sendTransaction 
  console.log(ethFunction); 
  EthUtil.sendTransaction() 
} 
 
const addNewParticipantTwo = (foo, bar) => { 
  var ethFunction = myContract.addParticipant.sendTransaction 
  console.log(ethFunction); 
  EthUtil.sendTransaction(ethFunction, foo, bar) 
} 

并称之为addNewParticpant(1, 2)和,addNewParticpantNew(1, 2)数字 1 和 2 不会出现在 util 函数的参数对象中。事实上,参数对象保持不变,4 个输入描述 node_modules 中的一些函数和文件。包括Bluebird以及对 index.js 的引用本身

<小时 />

我的最终目标是

  1. 传递来自 index.js 的函数至util.js

  2. 传递未知数量的变量

  3. 调用传递的函数并向其应用未知数量的变量

  4. 将整个事情包装在一个 promise 中并进行一些数据验证

理想情况下arguments[0]代表我要传递的函数,另一个是值。然后我会使用

var result = arguments[0].apply(null, Array().slice.call(arguments, 1)); 

如果有帮助的话,我想要传递的函数有一个可选的回调功能

请您参考如下方法:

正如评论中已经提到的,粗箭头没有自己的 thisarguments 对象。您正在记录的 arguments 对象来自模块加载器创建的函数及其传递的参数。

您可以使用“常规函数”,或者在这种情况下,您可以使用 ...rest parameter

并且,避免使用延迟反模式。

//first a little utility that might be handy in different places: 
//casts/converts a value to a promise, 
//unlike Promise.resolve, passed functions are executed 
var promise = function(value){ 
    return typeof value === "function"? 
        this.then( value ): 
        Promise.resolve( value ); 
}.bind( Promise.resolve() ); 
 
module.exports = { 
    sendTransaction(fn, ...args){ 
        return promise(() => fn.apply(null, args)); 
    }    
} 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!