You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何等待Monaco Editor的JSON验证完成?

Monaco Editor 等待JSON验证完成的正确方式

完全可以通过直接获取JSON Worker来精准等待验证完成,避开onDidChangeModelContent的延迟问题和onDidChangeModelDecorations的频繁触发问题。具体操作如下:

核心思路

JSON验证是在独立的Worker线程中执行的,直接调用Worker提供的验证方法,就能拿到最新、最准确的验证结果,无需依赖编辑器的装饰或内容变更事件。

代码实现

  1. 获取目标模型
    先拿到你要监听的JSON模型实例:
const model = monaco.editor.getModel(monaco.Uri.parse('inmemory://model.json'));

(这里的URI要和你创建编辑器时传入的一致)

  1. 获取JSON Worker并监听验证结果
    通过getJSONWorker()获取Worker实例,然后在内容变化时调用Worker的doValidation方法,等待验证完成:
// 获取JSON Worker
monaco.languages.json.getJSONWorker().then(worker => {
  // 监听模型内容变化
  model.onDidChangeContent(() => {
    // 调用Worker的验证方法,等待返回最新诊断结果
    worker.doValidation(model.uri).then(diagnostics => {
      // diagnostics就是最新的验证结果数组,包含错误、警告等信息
      // 这里写你验证完成后的逻辑,比如更新错误提示、执行后续操作
      console.log('验证完成,结果:', diagnostics);
    });
  });
});

为什么这个方法靠谱

  • doValidation是直接请求JSON Worker执行验证,返回的结果是实时且完整的,不会有延迟导致的旧数据问题。
  • 只会在内容变更时触发验证请求,不会像onDidChangeModelDecorations那样因为光标移动、选中内容等无关操作触发。

如果怕频繁修改导致重复请求,可以给onDidChangeContent加个防抖,比如用setTimeout控制请求频率,避免Worker压力过大。

内容的提问来源于stack exchange,提问作者linjunchao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:12:14