从异步函数请求结果

时间:2019-11-01 18:51:38

标签: javascript rest asynchronous

我需要变量“ 结果”的值进行比较。我在获取此“ 结果”值时遇到问题。

有人知道如何解决吗?

**我正在使用节点制作REST应用程序,我需要用它来生成GET方法

async function get(req, res, next) {
  var result = 0;
  try {
    const context = {};
    const login = {};
    login.user = req.params.user, 100;
    login.pass = req.params.pass, 200;

    var optionsgetmsg = {
      host: 'URL', // here only the domain name
      // (no http/https !)

      path: '/controller/verifica.asp?a=' + login.user + '&b=' + login.pass, // the rest of the url with parameters if needed
      method: 'GET' // do GET
    };


    var reqGet =  https.request(optionsgetmsg,  function (res) {

       res.on('data',  function (d) {
        jsonResponse = JSON.parse(d);
        result = jsonResponse.message;
      });

    });
    reqGet.end();
    reqGet.on('error', function (e) {
      console.error(e);
    });
    context.id = parseInt(req.params.id, 10);
    console.log(result);
    //problem
    if(result == "yes"){
    const rows = await operadores.find(context);

    if (req.params.id) {
      if (rows.length === 1) {
        res.status(200).json(rows[0]);
      } else {
        res.status(404).end();
      }
    } else {
      res.status(200).json(rows);
    }
  }
}

1 个答案:

答案 0 :(得分:1)

您可以使用执行HTTP请求并支持诺言的库,例如axios或重构当前的https.request并将其转换为诺言,这是一个示例:

function makeRequest({ user, password }) {
  return new Promise((resolve, reject) => {
    const options = {
      host: 'URL', 
      path: `/controller/verifica.asp?a=${encodeURIComponent(user)}&b=${encodeURIComponent(pass)}`
      method: 'GET'
    };
    const reqGet = https.request(options, function (res) {
       res.on('data', function (d) {
          result = JSON.parse(d);
          resolve(result.message);
      });

    });
    reqGet.on('error', function (e) {
      reject(e);
    });
    reqGet.end();
  });
}

然后您可以简单地执行以下操作:

const result = await makeRequest(req.params);

我使用了一些您可能不熟悉的概念template literalobject destructuring