如何从需要 return 语句的 GraphQL 解析器中调用异步 node.js 函数?

2023-12-21

上提供的 Hello World 示例graphql.org/graphql-js http://graphql.org/graphql-js创建一个简单的 GraphQL 实现如下:

var { graphql, buildSchema } = require('graphql');

// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
    type Query {
        hello: String
    }
`);

// The root provides a resolver function for each API endpoint
var root = {
    hello: () => {
        return 'Hello World!';
    }
};

// Run the GraphQL query '{ hello }' and print out the response
graphql(schema, '{ hello }', root).then((response) => {
    console.log(response);
});

我正在尝试在解析器中运行异步函数,例如数据库调用,但我似乎不知道如何使其工作:

我正在尝试做的事情:

var { graphql, buildSchema } = require('graphql');

// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
    type Query {
        data: String
    }
`);

// The root provides a resolver function for each API endpoint
var root = {
    data: () => {
        getData((data) => {
            return data;    // Returns from callback, instead of from resolver
        }
    }
};

// Run the GraphQL query '{ data }' and print out the response
graphql(schema, '{ data }', root).then((response) => {
    console.log(response);
});

我尝试过使用承诺,但似乎没有办法在不输入回调的情况下逃避承诺。我还尝试了各种包装异步的方法getData函数强制其同步,但最终必须从异步函数返回一个值,同样的问题。我觉得这不可能这么复杂,我的意思是 GraphQL-JS 是 Facebook 写的。


所以,在你弄清楚这个问题后,你会觉得这个问题非常愚蠢,但由于我花了很长时间与它斗争,我将回答我自己的问题,这样其他人就有希望受益。

事实证明 GraphQL 解析器函数必须返回一个值或解决该值的承诺。所以我想用这样的事情来做:

var { graphql, buildSchema } = require('graphql');

// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
    type Query {
        data: String
    }
`);

// The root provides a resolver function for each API endpoint
var root = {
    data: () => {
        getData((data) => {
            return data;    // Returns from callback, instead of from resolver
        }
    }
};

// Run the GraphQL query '{ data }' and print out the response
graphql(schema, '{ data }', root).then((response) => {
    console.log(response);
});

可以用这样的方法来完成:

var { graphql, buildSchema } = require('graphql');

// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
    type Query {
        data: String
    }
`);

let promiseData = () => {
    return new Promise((resolve, reject) => {
        getData((data) => {
            resolve(data);
        });
    });
};

// The root provides a resolver function for each API endpoint
var root = {
    data: () => {
        return promiseData();
    }
};

// Run the GraphQL query '{ data }' and print out the response
graphql(schema, '{ data }', root).then((response) => {
    console.log(response);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从需要 return 语句的 GraphQL 解析器中调用异步 node.js 函数? 的相关文章

  • Javascript:使用 IIFE 和块语句之间的区别

    IIFE主要用于封装作用域 function let myVar 10 not global 但为什么不直接使用块语句呢 let myVar 10 also not global 除了范围封装之外 进一步使用 IIFE 是否还有其他好处 块
  • 重命名猫鼬中的字段[重复]

    这个问题在这里已经有答案了 我有两个 JSON 对象 每个对象都有一个名字字段 我想将名字重命名为名称 还想使用猫鼬将现有的名字值导入到名称 Schema const mongoose require mongoose const Sche
  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • 有没有办法让 jslint 在 javascript 的下一行中使用大括号?

    我改变了我的编码风格 function getParams entity use strict var accountID store getItem AccountID switch entity case Topic to functi
  • CSS 内边框?

    我纯粹用 CSS 创建了左侧的按钮 它是一个div 中的一个div 然而 右侧的三个按钮是background属性于img标签 我这样做是为了按照以下说明模拟翻转效果here http kyleschaeffer com best prac
  • 为动态加载的 HTML 内容触发 Bootstrap JS 行为

    我正在动态加载包含 Bootstrap 标记的 HTML 模板 但是 Bootstrap Javascript 行为不会应用于加载的内容 例如 如果加载的内容包含 Bootstrap 模式的标记 则该模式将无法正确运行 有没有办法可以触发
  • 在 UIWebView 中禁用复制和粘贴

    几乎 我已经尝试了一切方法来禁用复制 粘贴UIWebView但对我来说没有任何作用 我正在加载我的UIWebView来自字符串 字符串数组 如下所示 webView loadHTMLString NSString stringWithFor
  • 如何将本地文本文件上传到文本区域(网页内)

    我是一名新手程序员 需要一些帮助来弄清楚如何将本地文本文件上传到我正在构建的网站内的文本区域 我非常精通 HTML CSS 对 Javascript JQuery 有相当的了解 而且我刚刚学习 PHP 您能提供的任何帮助我将不胜感激 我有一
  • 如何防止输入文本中出现“后重音”

    我相信这是一个简单的问题 但在谷歌上搜索几个小时后我找不到任何答案 也许我无法在搜索中使用正确的单词 P 我有一个 javascript 方法 可以防止用户用数字以外的其他字符填充文本框 如下面的代码所示 它在 KeyDown 事件中使用
  • 在需要时初始化模块

    我有一个模块 里面有一些初始化代码 加载模块时应执行 init 目前我正在这样做 in the module exports init function config do it in main var mod require myModu
  • 将项目中的node_modules集中到子项目中

    是否可以以在中心点上拥有所需模块的方式配置 grunt 我有以下项目结构 Project subproject subproject subproject 我通过 grunt 构建项目的所有子项目 并且我也可以为自己构建每个子项目 目前 我
  • 使用 Javascript/Node.js 在代码内执行 mongoimport

    node js javascript 中是否有任何库可供个人使用mongoimport在代码中 据我了解 mongoimport 有点像 exe 您必须先执行它 然后才能使用其文本输入环境 是否可以在我的代码中执行 mongoimport
  • 将基本的 Node.js 应用程序部署到 openshift 在 git Push 上出现错误

    我使用 openshift 网站上的过程设置了一个默认节点应用程序 在我的 ubuntu 盒子上做了一个 git 克隆 编辑了readme md 做了一次提交 并尝试推送到仓库 出现很多 npm fetch failed 错误 以及很多 E
  • 在 javascript 中实现固定位置会导致 Safari 滚动时出现抖动

    固定位置不适用于我的用例 因为它固定在浏览器窗口上 您可能会处于文本在屏幕右侧之外且无法到达的状态 无论如何 我尝试使用绝对定位 然后调整javascript中的 顶部 它在 Firefox 和 Chrome 中运行良好 但在 Safari
  • 从 Flask 运行 NPM 构建

    我有一个 React 前端 我想在与我的 python 后端 API 相同的源上提供服务 我正在尝试使用 Flask 来实现此目的 但我遇到了 Flask 找不到我的静态文件的问题 我的前端构建是用生成的npm run build in s
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 如何使用 jQuery 过滤 DropDownList 中的选项

    我有 2 个 DropDownList 第一个 DropDownList 有 4 个选项 第二个 DropDownList 有 20 个选项 我想要一个选项value 1在第一个 DropDownList 中选择我在第二个 DropDown
  • 如何将数据推送到嵌套对象

    如何将另一个元素推入variables来自以下对象的属性 var request name Name id 3 rules name Rule name tags tagId 1 variables variable var1 matchT
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引
  • 在 Firestore 文本字段中存储文本文件并删除换行符

    我正在尝试将 CSV 文件存储在 Cloud Firestore 内的文本字段中 然而 Firestore 正在删除所有换行符并将整个 CSV 文件存储为一行 这Firestore 数据类型文档 https firebase google

随机推荐

  • 如何让两个 JAR 在“docker run 容器”上自动启动

    我希望通过 run 命令调用 docker 容器后自动执行两个单独的 JAR 文件 因此当我输入docker run mycontainer他们都被称为 到目前为止 我有一个如下所示的 dockerfile base image is ja
  • 在文本框中搜索单词并将光标移动到文本框中的下一个匹配项?

    我目前有一个小部件 可以搜索我的主文本框并突出显示与我的搜索匹配的单词 我遇到的问题是找到一种方法将光标移动到找到的第一个匹配项 然后在下次按 Enter 时将光标移动到找到的下一个匹配项 我有两种方法可以在文本框中搜索单词 一种方法是查找
  • 如何使用 Greasemonkey 单击此按钮?

    我是 JS 的新手 我正在尝试单击此按钮 a class simplebutton href find a 该按钮的 XPath 是 html body div 5 div span 2 a 并且可以在以下位置查看目标页面的快照这个小提琴
  • CompositeTransform 只在 silverlight 中使用吗?

    CompositeTransform仅用于silverlight 我们是否可以在 WPF 中使用它或任何等效的替代品 没有CompositeTransform然而在WPF中有一个TransformGroup 因此 等效替换是Transfor
  • 使用 Text::CSV_XS 模块将列插入 Perl 中的 CSV 文件

    如何使用 Text CSV XS 模块将列添加到 CSV 文件 模块中的打印例程仅将数组写入一行 如果我有一个数组 如何将其作为列写入文件 我已经写了下面的代码 open my outFH gt outFile or die outFile
  • 如何将椭圆动画路径旋转一定角度?

    我使用以下方法来获取实体随时间沿椭圆路径行进时的 x 和 y 位置 x Math cos time width 2 y Math sin time height 2 有没有一种简单的方法可以将整个物体旋转一定的度数 例如 45 度或 132
  • KendoUI 集成到 Durandal JS

    我正在构建一个phonegap 应用程序 并计划使用 Telerik 的 Kendo UI 框架来生成 UI Telerik Kendo UI 已经有一个 MVVM 实现 我想使用它而不包括 Knockout JS 这是支持的东西 还是 D
  • 在 Webview 中清除用户的 Facebook 会话

    我有一个 WebView 它允许用户将图像分享到 Facebook 这个过程涉及他们登录 FB 完成后 我销毁 WebView 应用程序重置 并向不同的用户提供相同的功能 目的是让 WebView 不从一个会话到下一个会话保持登录状态 但是
  • 如何使用 Android SDK Manager 安装 NDK

    据说可以用Android SDK manager来安装NDK 如下图 不幸的是 我没有SDK Plantforms SDK Tools and SDK Update Sites我的 SDK 管理器中的选项卡 我的图片如下 那么我的情况如何安
  • 在设备树中注册 snd-soc-dummy

    我正在尝试在我的设备树源文件中注册 soc utils 中提供的 ALSA 虚拟编解码器 以将其与 i2s 设备驱动程序 sun8i i2s 一起使用 我尝试在 i2s 配置中设置 sound dai 字段 如下所述 https patch
  • PHP有peek数组操作吗?

    我想查看数组的第一个元素 此操作等效于以下代码 function peek list item array shift list array unshift list item return item 这段代码对我来说似乎真的很重 并且 p
  • 当我绘图时如何消除线条之间的这些“点”?

    is there an easy way to not draw this points in my lines I don t know why this points are there because i never release
  • 如何永久运行 Ionic 服务?

    我正在为一个应用程序使用 Ionic 框架 代码位于Linux服务器上 我正在使用运行应用程序ionic serve通过腻子命令 但是 问题是如果我关闭腻子 应用程序就会停止 有没有办法让离子服务作为守护进程永久运行 我怀疑您尝试这样做是因
  • IIS发布后如何修复CSS中的图像路径?

    我是 MVC V4 新手 在将网站发布到 IIS 后遇到问题 通过 Web 浏览器 和页面检查器 在 IIS Express 中查看时 我的网站运行良好 然而 当我将我的网站 通过 VS2012 发布到 IIS 时 我的 CSS 引用的所有
  • 无法显示png

    我正在虚拟机 Red Hat Enterprise Linux Server 版本 6 4 上运行 R shiny R 版本 3 0 1 2013 05 16 一切正常 即服务器启动 应用程序运行等 只要我不尝试绘制图表 renderPlo
  • 如何在 C++ 中使用复数“i”

    我现在正在编写一个简单的 DFT 算法 我想在复指数中使用复数 i 我看到有人用 include
  • 自定义 UIView 类 - Swift

    我已经构建了一个从底部出现并在一段时间后隐藏的视图 它运行良好 但我想将其放入UIView类作为模态 我浏览了互联网 但我无法理解或理解如何做到这一点 snake UIView frame CGRect x 0 y self view fr
  • driver.Context.synchronize()- 还有什么要考虑的 -- - 清理操作失败

    I have this https stackoverflow com questions 12159709 cuda out of memory threads and blocks issue address is out of bou
  • 在字符串中使用 switch

    尝试通过首先将字符串转换为字符然后应用开关来在字符串中使用开关 但仍然没有完成 这是我的代码 import java io BufferedReader import java io IOException import java io I
  • 如何从需要 return 语句的 GraphQL 解析器中调用异步 node.js 函数?

    上提供的 Hello World 示例graphql org graphql js http graphql org graphql js创建一个简单的 GraphQL 实现如下 var graphql buildSchema requir