在javascript中使同步调用异步

在javascript中使同步调用异步,javascript,asynchronous,synchronous,Javascript,Asynchronous,Synchronous,全部, 我使用节点hid向USB到I2C适配器发送命令。当我的程序运行时,拔下并重新插入设备时,适配器上的固件可能会被锁定。我已经能够确定我的程序在调用hid write时挂起,这是一个同步调用。当固件锁定时,我的程序将失去响应。如果我重新加载设备并让固件恢复,那么我可以捕获写入失败并进行适当处理。我要做的是提醒用户设备似乎已被锁定,他们需要拔下插头并重新插入 我试着像下面这样为写调用设置一个超时,如果它没有在2秒内完成并清除超时,那么告诉用户重置设备 function alertUser()

全部,

我使用节点hid向USB到I2C适配器发送命令。当我的程序运行时,拔下并重新插入设备时,适配器上的固件可能会被锁定。我已经能够确定我的程序在调用hid write时挂起,这是一个同步调用。当固件锁定时,我的程序将失去响应。如果我重新加载设备并让固件恢复,那么我可以捕获写入失败并进行适当处理。我要做的是提醒用户设备似乎已被锁定,他们需要拔下插头并重新插入

我试着像下面这样为写调用设置一个超时,如果它没有在2秒内完成并清除超时,那么告诉用户重置设备

function alertUser() {
   alert("It appears that the USB2ANY has had an error\nPlease disconnect and reconnect the device and clear this alert");
}

try {
   //TODO: Gets stuck here when USB2ANY goes south.  Need a way to stop this or alert user to reset the USB2ANY
   //      write is a synchronous call
   var timer = setInterval(alertUser, 2000);
   console.log("Calling hid write for " + command);
   this.hid.write(temp);
   clearInterval(timer);
   console.log("Finished hid write for " + command);
} catch(err) {
   console.log("HID write failed = " + err);
   u2aFlushCallbacks();
}

不幸的是,因为write命令是同步的,所以计时器没有启动。我不知道如何解决这个问题。我是否可以以某种方式将此调用包装为异步调用?

请参阅主题。我唯一能想到的方法是使用。但我不知道他们是否有权访问您正在使用的API。@pjc:看来情况正好相反。