在函数上调用`call()`不会通过带有promise的`this`参数

时间:2019-03-18 15:25:42

标签: javascript promise async-await node-modules

尝试将对象作为上下文从一个模块传递到下一个模块时遇到问题:

这是我的流程应该如何工作的,我认为我今天丢失了一些东西或只是哑巴了:D

module.exports = dixell = { // Dixell lib 
   fns: {
    slaveType: async (adr) => {
      let type;
      try {
        client.setID(adr);
        type = await client.readHoldingRegisters(1,2);
        let mswordMsbyte = String.fromCharCode(parseInt(type.data[0].toString(2).slice(0,-8), 2));
        let lswordCode = parseInt(registers.data[1].toString(2).slice(0,-6), 2);
        return `${mswordMsbyte}${lswordCode}`;
      } catch(err) {
        console.log(err)
      }
    }
  }
}

^^第一个模块具有该功能。为此功能,我尝试通过用this在另一个模块上调用对象来将对象绑定为call()

const ModbusRTU = require('modbus-serial');
const client = new ModbusRTU(); // this creates the object i want to pass
const dixell = require('../../libraries/dixell');
// sleep function 
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

client.connectRTUBuffered('COM3', { baudRate: 9600 }); 

module.exports = exports = {} 

exports.plcQueueFns = async (adr, fns) => {
  let data = {};
  for(let fn of fns) {
    console.log(typeof(client))
    data[fn.key] = await fn.fn(adr);
    await sleep(10);
  }
  return data;
}

exports.getPayload = async (plantid) => {
  let adrs = await exports.getPlcs();
  let devices = [];
  for (let adr of adrs) {
    try {
      let fnsdata = await exports.plcQueueFns(adr, [
        {key: 'type', fn: dixell.fns.slaveType},
      ]);
  }
}

^^在第二个模块上,我有一个名为getPayload的函数,该函数启动循环并使用plcQueueFns循环运行其他函数

但是我无法传递上下文 我尝试过:

getPaylod

发送这样的函数

{key: 'type', fn: dixell.fns.slaveType.bind(client)}>不起作用

我也在plcQueueFns中尝试用

调用它

data[fn.key] = await fn.fn.call(client, adr)>仍然没有

slaveType()中,我得到{}的{​​{1}}

出现此错误

this

请咨询。我在做错什么或想念什么?

预先感谢

0 个答案:

没有答案