gprc 客户端异步响应 NodeJS

And*_*nto 0 rpc node.js async-await grpc graphql

我试图在函数中调用一个简单的 grpc 请求,但我不知道如何等待响应并将其传递到 grpc 调用之外。

应该是这样的:

Client: (parent, args, context, info) =>{
      client.Get({thing, objects, properties}, function(err, response) {
            //how to return the response outside?
          });
      //await for the response function.
};
Run Code Online (Sandbox Code Playgroud)

是否可以在 client.Get 函数之外以某种方式返回响应?有人有一些建议吗?谢谢您的建议!

sli*_*wp2 10

你有两种方法:

  1. 自己将gRPC的方法从错误优先回调包装到promise。
new Promise((resolve, reject) => client.Get({thing, objects, properties}, function(err, response) {
  if(err) {
    return reject(err)
  }
  resolve(response)        
}))
Run Code Online (Sandbox Code Playgroud)
  1. 使用grpc-promise来 Promisify gRPC 客户端的方法。
const grpc_promise = require('grpc-promise');;
grpc_promise.promisifyAll(client);
Run Code Online (Sandbox Code Playgroud)

然后,您可以将这个承诺的 gRPC 客户端传递给 GraphQL 上下文。(根据函数签名猜测您正在使用 GraphQL)。

然后您可以在 GraphQL 解析器中返回一个 Promise。

Client: (parent, args, context, info) =>{
  return context.client.Get({thing, objects, properties})
};
Run Code Online (Sandbox Code Playgroud)