繁体   English   中英

我怎样才能等待我的“请求”和响应回到前端?

[英]How can I wait for my "request" and response back to front end?

我现在正在研究 Zoom API。 我想将我的令牌从 ZOOM API 发送到前端作为响应。 但是,“来自请求的令牌”始终首先打印且未定义! 然后来自 Zoon API 的令牌”将跟随令牌。我怎样才能做到这一点?谢谢!

const Newrequest = require("request");

class ZoomController {
  async getInvLink({ request, response }) {
const instructor_id = params.id;
try {
  let tokenRes;
  const code = request.all().code;
  console.log("the code from frontend is ", code);
  const client_id = _something_
  const client_secret = _something_
  var options = {
    method: "POST",
    url: "https://api.zoom.us/oauth/token",
    qs: {
      grant_type: "authorization_code",
      code: code,
      redirect_uri: _something_
    },
    headers: {
      Authorization:
        "Basic " +
        Buffer.from(client_id + ":" + client_secret).toString("base64")
    }
  };

  await Newrequest(options, function(error, res, body) {
    if (error) throw new Error(error);
    tokenRes = JSON.parse(body);
    console.log("token from Zoon API",tokenRes);
  });

  console.log("token from request",tokenRes);
  return response.status(200).send(tokenRes);
} catch (error) {
  console.log(error);
  return response.status(401).send();
}

我不知道这个 api 是什么,但我将做出有根据的猜测, Newrequest不会返回承诺。 所以等待它实际上并不是你想要做的。

但是,您可以做的是使用一些简单的代码将其转换为承诺:

const tokenRes = await new Promise((resolve, reject) =>  {
    Newrequest(options, function(error, res, body) {
      if (error) reject(error);
      tokenRes = JSON.parse(body);
      console.log("token from Zoon API",tokenRes);
      resolve(tokenRes);
    });
})

你必须要听的东西端点,您将收到的代码在那边。 这是您可以发送以交换访问令牌的代码。

请参阅此链接: https : //www.npmjs.com/package/request#promises--asyncawait

您可以使用util.promisify()将需要回调的常规函数​​转换为返回承诺

例子 :

Newrequest(options, function(error, res, body) {
    if (error) throw new Error(error);
    tokenRes = JSON.parse(body);
    console.log("token from Zoon API",tokenRes);
});

// to

const util = require('util');

const req = util.promisify(Newrequest)
const data = await req(options)
// ... 

这是一个示例代码。 请适应您的需求

有用的课程: https : //masteringjs.io/tutorials/node/promisify

请求库已弃用

使用另一个库会很有趣。

备择方案 :

暂无
暂无

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

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