尝试将对象作为上下文从一个模块传递到下一个模块时遇到问题:
这是我的流程应该如何工作的,我认为我今天丢失了一些东西或只是哑巴了: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
请咨询。我在做错什么或想念什么?
预先感谢