node.js - 如何在nodejs中等待异步函数完成执行

标签 node.js asynchronous

我有一个函数,它返回一个从nodejs 中的http GET 请求获取的值。如何等待异步请求函数完成并从生成请求的函数返回结果。 我已经检查了 npm 中的异步库,但这并不能解决我的问题。 感谢您的帮助!!

 function daemonGetNodeStatus(kubeURL, nodeName) {
    console.log(nodeName);
    var request = require("request");
    var options = {
        method: 'GET',
        url: kubeURL+'/api/v1/nodes/'+nodeName+'/status',
        headers: {
            'Cache-Control': 'no-cache',
            'Authorization': 'Bearer '+constants.accessToken
        }
    };

    request(options, function(error, response, body) {
        if (error)
            throw new Error(error);
        var bodyJSON = JSON.parse(body);

        var result = [];

        var temp = {};

        for (var i = 0; i < bodyJSON.status.conditions.length; i++) {
            if(bodyJSON.status.conditions[i].status == "True"){
                result.push(bodyJSON.status.conditions[i].type);
            }

        }

        console.log(result);

    });

};

最佳答案

您可以使用Promise .

function daemonGetNodeStatus(kubeURL, nodeName) {
  console.log(nodeName);
  var request = require("request");
  var options = {
    method: 'GET',
    url: kubeURL+'/api/v1/nodes/'+nodeName+'/status',
    headers: {
      'Cache-Control': 'no-cache',
      'Authorization': 'Bearer '+constants.accessToken
    }
  };

  return new Promise((resolve, reject) => {
    request(options, function(error, response, body) {
      if (error)
        reject(new Error(error));
      var bodyJSON = JSON.parse(body);
      var result = [];
      var temp = {};

      for (var i = 0; i < bodyJSON.status.conditions.length; i++) {
        if(bodyJSON.status.conditions[i].status == "True") {
          result.push(bodyJSON.status.conditions[i].type);
        }
      }

      resolve(result);
  });
}

daemonGetNodeStatus(url, name).then(result => {
   console.log(result);
}).catch(err => {
   console.log(err);
});

关于node.js - 如何在nodejs中等待异步函数完成执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48843311/

相关文章:

node.js - 如何在 scala.js 中提供和使用 require.js 模块(和扩展类)

node.js - npm/咕噜声 : is it possible to install grunt without npm?

javascript - 在Javascript中使用回调函数

java - 如何在 Android java 插件端等待异步操作(任何 I/O)?

python - 我怎么能用 trio 异步读取文件的特定行

python - 异步迭代器定期滴答

node.js - 如何调试 node.js 中的 `RangeError: Maximum call stack size exceeded` 错误

javascript - 使用 'let' 作为变量名不会在 google v8 中引发任何错误

javascript - Gitlab 使用 Axios 或 Curl 请求发布/放入 Node - 无法写入资源 - 400 错误

C++11 async - 最佳线程数的管理是自动的吗?