节点js等待request.get回调发生,然后转到下一行

时间:2017-08-09 13:45:43

标签: javascript node.js

我正在尝试向URL发出一个请求,然后我从中获取图像数据。现在我需要做的是:

  1. 从请求中获取图像数据
  2. 将此数据分配给一个变量
  3. 现在打印此/推送此数据
  4. 我在做什么?

    var data;
    request.get(URL, function (error, response, body) { //1
            if (!error && response.statusCode == 200) {
                data = "data:" 
                + response.headers["content-type"]
                + ";base64,"
                + new Buffer(body).toString('base64');
            }
        });
    console.log(data) //2
    

    问题?

    现在我需要首先发生请求,然后转到console.log,这样我的数据就不会被定义,然后我可以将它推送到我的字典中。但是现在它从1发出一个请求,然后它移动到2,这是console.log,然后它给出错误。那么我能做什么呢?

    注意:我不想在该函数中添加console.log,因为我无法将所有代码放在请求函数中。

1 个答案:

答案 0 :(得分:1)

您可以使用Async/Await

Async / Await是一个关键字,它会告诉您的代码等待函数的结果继续。这叫做Asynchronous code

function getData() {
   request.get(URL, function (error, response, body) { //1
        if (!error && response.statusCode == 200) {
            var data = "data:"
            + response.headers["content-type"]
            + ";base64,"
            + new Buffer(body).toString('base64');
            return data
        }
    });
}

然后在功能中,您需要治疗数据

async function main() {
   var myData = await getData();


  ... Your treatment of data
}

您可以在javascript here

中获得有关同步/异步代码的更多信息