GraphQL:从同级解析器访问另一个解析器/字段输出

2023-11-27

需要一些帮助。假设我请求以下数据:

{
  parent {
    obj1    {
        value1
    }
    obj2    {
        value2
    }
  }
}

我需要 value1 解析器中 value2 的结果进行计算。

想过在 value2 中返回一个承诺并以某种方式将其放入 value1 解析器中,但是如果 value2 解析器尚未运行怎么办?

有什么办法可以做到吗?


我的第一反应是,你可以利用上下文来实现这样的目标。我想你可以有一个类似缓存的对象与事件发射器混合来解决竞争条件问题。

例如,假设我们有一些课程

class CacheEmitter extends EventEmitter {

  constructor() {
    super();
    this.cache = {};
  }

  get(key) {
    return new Promise((resolve, reject) => {
      // If value2 resolver already ran.
      if (this.cache[key]) {
        return resolve(this.cache[key]);
      }
      // If value2 resolver has not already run.
      this.on(key, (val) => {
        resolve(val);
      });
    })
  }

  put(key, value) {
    this.cache[key] = value;
    this.emit(key, value);
  }
}

然后从你的解析器你可以做这样的事情。

value1Resolver: (parent, args, context, info) => {
  return context.cacheEmitter.get('value2').then(val2 => {
    doSomethingWithValue2();
  });
}

value2Resolver: (parent, args, context, info) => {
  return doSomethingToFetch().then(val => {
    context.cacheEmitter.put('value2', val);
    return val;
  }
}

我还没有尝试过,但这似乎对我有用!如果你尝试一下,我很好奇,所以请告诉我它是否有效。仅出于记账目的,您需要确保实例化“CacheEmitter”类并将其输入到顶层的 GraphQL 上下文中。

希望这可以帮助 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GraphQL:从同级解析器访问另一个解析器/字段输出 的相关文章

  • 允许指针(单击)事件穿过元素,同时保持滚动功能

    我的目标是拥有一个允许 下面要点击 交互的元素 滚动 众所周知 1 的解是pointer events none 这正如中所描述的单击 DIV 到底层元素 https stackoverflow com questions 3680429
  • 最小的 ExtJS 包是什么?

    有谁知道 Ext JS 2 2 所需的最少文件吗 我知道 ExtJS 网站有一个功能 build http extjs com products extjs build ExtJS ext js 的小版本 作为 ext all js 的替代
  • ExtJS 4:克隆商店

    我正在尝试找出如何克隆Ext data Store不保留旧的参考 让我用一些代码更好地解释一下 这是源商店 var source Ext create Ext data Store fields name age data name foo
  • 从 DOM 中删除后,动态添加的 JavaScript 脚本会继续执行

    因此 我正在创建一个 SPA 并使用 AJAX 将 HTML 页面加载到我网站的索引页面中 问题是 当包含我的一个页面时 它似乎会徘 徊并执行其中的 JavaScript 代码 即使它随后从 DOM 中删除 索引 html 正文 div d
  • 通过 HTML5 文件和 URL API 正确创建和提供 PDF Blob

    好吧 假设我有文档数据存储在某处 让我们任意取this pdf http www grida no climate ipcc tar wg1 pdf tar 01 pdf 问题 1 我想要做的是对此 URL 进行 AJAX 调用 因为我需要
  • History.replaceState 仍然向“浏览历史记录”添加条目

    具体来说 调用以下代码片段 history replaceState undefined undefined value 正确地不会影响当前页面的后退按钮行为 但是will在 浏览历史记录 页面添加一个条目 这是我不想要的 下图是 Chro
  • 为什么我的 onclick 事件自动触发

    加载页面时最初显示 Hello World 我希望它仅在单击按钮后显示 我知道我可以通过向按钮添加内联事件侦听器来做到这一点 我可以只用脚本编写所有这些代码吗
  • JointJS - 处理链接删除点击

    创建链接后 将鼠标悬停在其上会显示红色 X 以将其删除 单击此按钮将触发一系列事件 通过订阅 全部 活动收集 单元格 向下指针 链接 向下指针 cell pointermove x5 似乎可疑 单元格 指针向上 在浏览了文档并花费了太长时间
  • Rails 4 - 带有 dependent-fields-rails 的条件 JS

    我正在尝试弄清楚如何在我的 Rails 4 应用程序中使用 dependent fields rails gem 我迷路了 我已将 underscore js 包含在我的供应商 javascripts 文件夹中 并更新了我的 applica
  • 全局定义的 AngularJS 控制器和封装

    根据 AngularJS 的教程 控制器函数仅位于全局范围内 http docs angularjs org tutorial step 04 http docs angularjs org tutorial step 04 控制器函数本身
  • 比较 javascript 元素和 scala 变量的 Play 框架 Twirl 模板

    如下面的代码示例所示 我想比较 scala 辅助元素内的 javascript 元素 然而 即使存在元素 abcde 它也始终返回 false 除了使用标签之外 如何获取 scala 辅助元素内的 javascript 值 appSeq S
  • CryptoJS 和 Pycrypto 一起工作

    我正在使用 CryptoJS v 2 3 加密 Web 应用程序中的字符串 并且需要在服务器上使用 Python 对其进行解密 因此我使用 PyCrypto 我觉得我错过了一些东西 因为我无法让它工作 这是JS Crypto AES enc
  • Google 地图 v3 中标准缩放控件的样式

    有没有一种简单的方法可以在 Google Maps JavaScript API v3 中设置缩放控件的样式 我想要的只是改变标准图像 http maps gstatic com intl en ALL mapfiles mapcontro
  • while 循环元素状态 cypress

    我有一个问题 我想单击一个按钮直到它消失 但次数可能会有所不同 所以我想检查可见性状态 当可见 true时单击按钮 当可见 false时结束测试 但问题是我不知道如何循环从获取元素到末尾的所有链 单击按钮一次 由于中断而停止 如果我删除中断
  • Jade(当前称为“Pug”)模板引擎中的循环

    我想使用一个简单的循环 例如for int i 0 i lt 10 i 如何在 Jade 引擎中使用它 我正在使用 Node js 并使用expressjs 框架 例如 for var i 0 i lt 10 i li array i 你可
  • nvd3.js - 无法更改折线图中线条的颜色

    我正在尝试更改 nvd3 折线图不同线条的颜色here http nvd3 org livecode index html codemirrorNav但我无法理解该怎么做 我想将示例中的 2 条线的颜色更改为绿色和青色 我试过 nv add
  • 如何在 ChartJS 中创建自定义图例

    我需要使用 ChartJS 库为我的圆环图创建自定义图例 我已经使用 ChartJS 提供的默认图例创建了甜甜圈 但我需要一些修改 我希望其价值高于汽车名称 另外 我不喜欢粘性图例 我想将其与甜甜圈分开 这样我就可以更改字体 框的样式 例如
  • jQuery fadeOut 一个 div,fadeIn 另一个 div 在其位置

    我正在尝试一个简单的 jQuery 脚本来淡出一个 div 并淡入另一个 div 但由于某种原因 第一个 div 永远不会淡出 这可能是代码的一个明显问题 但我似乎无法弄清楚 div div div div
  • Javascript / jQuery - 转换特殊 html 字符

    我有一个pre元素中包含一些 html 代码 该代码中有特殊字符 例如 lt 所以它不会破坏页面 然后我有一个 javascript 函数 它获取此 pre 元素的内容 突出显示它 使用 codemirror 并用突出显示的文本替换元素内容
  • Angular 5 中 Observable.ForkJoin 的重复 Http 请求

    我有一个 Angular 5 应用程序 组件中包含以下代码 ngOnInit Observable forkJoin this highlightedInsight this insightService getHighlightedIns

随机推荐

  • phpexcel下载

    你好 我是 phpexcel 的新手 我想知道是否有某种方法将我创建的 Excel 发送给客户端下载而不将其保存在我的服务器上或在他下载后立即将其删除 我正在尝试在页面上创建一个 导出按钮 该按钮将为用户提供一个 弹出窗口 其中包含他想要我
  • 如何在 SublimeText 中使用自定义字体

    我知道用户可以通过以下方式更改首选项中的 font face font face gohufont 11 font size 11 但是 每次我尝试添加 已安装的 非系统字体 例如Gohufont上面 它不起作用 安装TTF尽管有特定于平台
  • 如何从 qmake 获取 Makefile

    给定一个 x pro 文件 我如何生成 makefile 运行 qmake x pro 会生成一个没有 Makefile 的 x pbproj 目录 Thanks 编辑 添加信息 关于 pro 文件和平台 我在 Mac OS X 10 6
  • React (JSX) 中的子级与父级通信无需流量

    我对 React 还很陌生 我正在绞尽脑汁地试图解决一个在我看来很简单的问题 这是我构建的组件的图片 颜色选择组件 我想要完成的事情似乎微不足道 但实际上我读过的每一篇解释要做什么的文章都告诉我一些不同的东西 而且没有一个解决方案有效 它分
  • 按引用调用和按值调用之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 值参数和参考参数之间的区别 按引用调用和按值调用有什么区别 在 C 中 没有引用调用 您能得到的最接近的是获取一个地址 并传递该地址的副本 按值 见下文 在 C 中 按引用调用传递对对象的引用 原始对
  • 什么是 lambda 表达式?何时应该使用它?

    C 11 中的 lambda 表达式是什么 我什么时候会使用一个 他们解决了哪类在引入之前无法解决的问题 一些示例和用例会很有用 问题 C 包含有用的通用函数 例如std for each and std transform 这非常方便 不
  • C# 中的 XML 序列化和 DefaultValue("") 相关问题

    我的类属性具有将被序列化的默认值 public class DeclaredValue XmlElement ElementName Amount DataType double IsNullable false DefaultValue
  • 在R中显示UTF-8编码的汉字

    我尝试在 R 中打开包含 繁体 中文字符的 UTF 8 编码的 csv 文件 出于某种原因 R 有时将信息显示为中文字符 有时显示为 unicode 字符 例如 data lt read csv mydata csv encoding UT
  • 触发 Jenkins 基于新标签和提交构建

    我们正在使用 Git 插件 https wiki jenkins ci org display JENKINS Git Plugin 目前 只要将更改推送到 GitHub 我们就会通过 Webhooks 启动 Jenkins 构建 现在我们
  • 使用express.js进行路由-无法获取错误

    与 一起工作express js第一次 我坚持添加我的第一条路线 我的路线定义在app js像这样 app get user id photos function req res res send user req params id 然而
  • 阻止页面加载时触发 CSS 转换

    我遇到了 CSS 问题transition页面加载时触发属性 问题是当我应用color transition到一个元素 例如 transition color 2s 然后 当页面首次加载时 我的元素会从黑色闪烁到它自己指定的颜色 假设我有以
  • 如何在我的 Google Apps 脚本/Google 表格 HTML 中包含脚本?

    我无法让基于 Apps 脚本的 HTML 包含任何脚本 My doGet函数为HtmlService工作正常 function doGet return HtmlService createHtmlOutputFromFile myhtml
  • pylons mako如何检查变量是否存在

    在django中 我们可以这样做 views py def A request context test test return render to response index html context context instance
  • 为什么是这样:需要通过才能继续处理? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 有人可以解释为什么else pass为了完成其余代码
  • 在对象初始值设定项中分配事件

    为什么不能在 C 中的对象初始值设定项中将事件与属性一起分配 这样做似乎是那么自然 var myObject new MyClass Property value Event1 actor or Event2 actor 还是有什么我不知道
  • 如何强制客户端刷新 JavaScript 文件?

    We are currently working in a private beta and so are still in the process of making fairly rapid changes although obvio
  • 最少登录插入

    我有一个INSERT该语句占用了大量日志空间 以至于在该语句完成之前硬盘驱动器实际上已被填满 问题是 我really不需要记录它 因为它只是中间数据上传步骤 为了论证的缘故 假设我有 表 A 初始上传表 使用填充bcp 所以没有日志记录问题
  • OmniAuth 不适用于 Rails3 中的路由通配

    我正在尝试遵循 Railscast 241简单的 OmniAuth除非我在末尾有路由通配 否则它工作得很好 config routes rb match uri gt posts index 如果我要求 auth twitter使用 glo
  • Paramiko 身份验证失败,并显示“同意​​‘rsa-sha2-512’公钥算法”(以及 sshd 日志中的“不支持的公钥算法:rsa-sha2-512”)

    我有一个在 CentOS Linux 7 7 上运行的 Python 3 应用程序 对远程主机执行 SSH 命令 它工作正常 但今天我在对 新 远程服务器 基于 RHEL 6 10 的服务器 执行命令时遇到了一个奇怪的错误 遇到 RSA 密
  • GraphQL:从同级解析器访问另一个解析器/字段输出

    需要一些帮助 假设我请求以下数据 parent obj1 value1 obj2 value2 我需要 value1 解析器中 value2 的结果进行计算 想过在 value2 中返回一个承诺并以某种方式将其放入 value1 解析器中