繁体   English   中英

如何从Graphql解析函数中的回调返回值?

[英]How to return value from callback in Graphql resolve function?

如何从回调函数返回值并将其传递给 Graphql 中的解析函数?

这是显示概念的虚拟代码:

此函数运行 sql 查询:

function runQuery(query, cb){
   ....
   var value = "Something";
   cb(null, value);
}

这从回调函数中获取值并将其传递给 graphql 中的解析函数:

function getTitle() {
   return runQuery("...", function(err, value){ 
             return value; 
          });
}

Graphql 架构:

var SampleType = new GraphQLObjectType({
  name: 'Sample',
  fields: () => ({
    title: { type: GraphQLString },
  }),
});


query: new GraphQLObjectType({
    name: 'Query',
    fields: () => ({
      sample: {
        type: SampleType,
        resolve: () => getTitle(),
      },
    }),
  }),

您可以使用 promise 和async来实现这一点。

async function getTitle() {
  const queryResult = await runQuery("...");

  // ...
  // Do post-query stuff here that you currently have in your callback
  // ...

  return queryResult
}

async function runQuery() {
  const value = 'something';
  // ...
  return value;
}

从 7.10.0 开始, Node完全支持 async/await 如果您在浏览器中或被锁定在较低版本的节点中,请使用 TypeScript 或 Babel。

基本上,您可以围绕该 runQuery 创建一个承诺,以便在使用查询数据时可以使用 async await

const getTitle = () => {
    return new Promise((resolve, reject) => {
       runQuery("...", (error, response) => !error
           ? resolve(response)
           : reject(error))
    })
}

const asyncFunction = async () => {
    const data = await getTitle()
        .then((response) => {
            // handle response and return what you want
            return response.data
        })
        .catch((error) => {
            // handle error, log it, etc, in whatever way you want
            console.log(error.message)
            return null
        })
    if(data) { // data is valid
        // do what you want with the valid data (no error)
    } else { // there was an error
        // handle if there is an error
    }
}

asyncFunction()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM