我正在一个项目中,我的Electron App通过serialport
使用串行命令与物理设备进行交互。该应用会向设备发送一个字符串,该设备会执行命令(可能需要30秒左右),然后发送回一个字符串,以表示该操作的完成和结果。
我的目标是使一系列动作自动化。为此,基本上需要异步完成以下操作,以便渲染线程不会被阻塞:
实际上,每个循环周期中需要发送多个不同的命令,并且在每个循环之间,应用必须等待设备中的特定字符串。
这与我的最后一个问题 What's the correct way to run a function asynchronously in Electron? 有关。由此,我知道我应该使用Web Worker来异步运行某些东西。但是,我的计划原来涉及的问题比我预期的要多,我想问一问,要实现整个计划,而不仅仅是计划的某个方面,什么是实现此计划的好方法。
我尤其不确定如何使工作人员使用serialport
。它需要与之交互的串行设备是渲染过程的子进程,因此发送命令可能将通过Web Worker消息完成。但是我不知道如何让工作人员等待设备的特定响应。
(由于这个问题具有更一般的性质,所以我不确定是否应该提供一些代码片段。如果是通用的,我可以尝试编写一些伪代码以使问题更清楚。)
答案 0 :(得分:1)
我会采用这样的基于承诺的方法:
let promiseChain = Promise.resolve();
waitForEvent = function(){
return new Promise(resolve=>{
event.on("someEvent", (eventData => {
resolve(eventData)
}))
})
}
while(someLoopCondition) {
promiseChain = promiseChain
.then(sendToSerialPort(someString))
.then(waitForEvent)
.then(result=>{
updateUI(result)
})
}