在Jetbrains MPS中,我想在用户点击快捷方式或上下文菜单中的操作时执行 Web 请求。
成功执行此请求后,我想通过操作 MPS 模型向用户显示响应。
当我在 UI 线程中执行 web 请求时,ui 将被阻止,直到我得到响应或请求超时。
这会导致糟糕的用户体验。
如何异步执行请求?
在Jetbrains MPS中,我想在用户点击快捷方式或上下文菜单中的操作时执行 Web 请求。
成功执行此请求后,我想通过操作 MPS 模型向用户显示响应。
当我在 UI 线程中执行 web 请求时,ui 将被阻止,直到我得到响应或请求超时。
这会导致糟糕的用户体验。
如何异步执行请求?
Web 请求必须在单独的线程中执行 - afaik MPS 没有对ForkJoinPools的完整 JDK8 支持;我在这个例子中使用了老式的方法。
此外,您需要引用ModelAccess才能更改 MPS 模型。模型更改代码必须在 UI 线程中执行。
SwinUtilities.invokeAndWait
用于在 UI 线程中执行代码并包装modelAccess.executeCommand
模型更改代码。
是概念的this.asyncUpdate
属性,由概念编辑器显示。
正在执行的任务:
<iframe src='https://gfycat.com/ifr/DisfiguredAdeptAmericanbittern' frameborder='0' scrolling='no' allowfullscreen width='640' height='213'></iframe><p> <a href="https://gfycat.com/disfiguredadeptamericanbittern-mps">via Gfycat</a></p>