簡體   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