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

JSONata 2.0.0浏览器非异步场景输出[Object Promise]问题咨询

JSONata 2.0.0 返回[Object Promise]的原因及解决办法

原因

JSONata 2.0.0 做了破坏性API变更:evaluate()方法不再同步返回计算结果,而是默认返回Promise对象——哪怕你的表达式里完全没有异步逻辑。而v1.8.0及更早版本中,evaluate()是直接同步返回结果的,这就是旧版本正常、新版本直接赋值会显示[Object Promise]的核心原因。

解决办法

你需要通过Promise的标准处理方式获取实际结果,以下是两种常用方案:

方案1:使用async/await语法

将greeting函数改为异步函数,用await等待evaluate()的执行结果:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>JSONata test</title>
    <script src="https://cdn.jsdelivr.net/npm/jsonata/jsonata.min.js"></script>
    <script>
      async function greeting() {
        var json = JSON.parse(document.getElementById('json').value);
        var result = await jsonata('"Hello, " & name').evaluate(json);
        document.getElementById('greeting').innerHTML = result;
      }
    </script>
  </head>
  <body>
    <textarea id="json">{ "name": "Wilbur" }</textarea>
    <button onclick="greeting()">Click me</button>
    <p id="greeting"></p>
  </body>
</html>

方案2:使用Promise的then()回调

如果不想用async/await,也可以通过then()方法接收结果:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>JSONata test</title>
    <script src="https://cdn.jsdelivr.net/npm/jsonata/jsonata.min.js"></script>
    <script>
      function greeting() {
        var json = JSON.parse(document.getElementById('json').value);
        jsonata('"Hello, " & name').evaluate(json)
          .then(result => {
            document.getElementById('greeting').innerHTML = result;
          });
      }
    </script>
  </head>
  <body>
    <textarea id="json">{ "name": "Wilbur" }</textarea>
    <button onclick="greeting()">Click me</button>
    <p id="greeting"></p>
  </body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:20:29