Javascript 功能运行不正常

Javascript 功能运行不正常,javascript,node.js,Javascript,Node.js,由于某些原因,在node.js中,代码没有按顺序运行。在从function2检索数据之前,它正在运行console.log(data2)。 我假设这是因为node.js是异步运行的。然而,我不太确定如何修复它。 提前谢谢你的帮助 function function1(app){ app.post('/test', (req, res, next) => { const url = `url1`; request(url, function(error

由于某些原因,在node.js中,代码没有按顺序运行。在从function2检索数据之前,它正在运行console.log(data2)。 我假设这是因为node.js是异步运行的。然而,我不太确定如何修复它。 提前谢谢你的帮助

function function1(app){
    app.post('/test', (req, res, next) => {
        const url = `url1`;
        request(url, function(error, response, body) {
            if(!error && response.statusCode == 200) {
                var data = JSON.parse(body);
                var data2 = function2(data.id);
                console.log(data2); //undefined  
                res.send(profileData);
            }
        });
    })
}

function function2(id){
    const url = `url2/${id}`;
    request(url, function(error, response, body) {
        if(!error && response.statusCode == 200) {
            var data = JSON.parse(body);
            console.log(data); //output correct data
            return data;
        }
    });
}

因为您正在输出
console.log(data2)
之前调用
function2()。后者立即执行,而前者必须发出服务器请求。将
data2
传递给
function2()
,并在从
function2()输出结果后将其输出


看:你说得对。因为它是异步工作的,所以它实际上是按顺序运行的,不需要等待函数2的响应。Node.js只需调用function2并继续,如果希望它等待或使用来自异步调用的数据,则应使用承诺(async/await或then)或回调。看到上面的评论,我还建议您看看Promise.all.Bit,这是一个错误的概念,节点是异步运行的…这是您使用的特定请求方法,doI得到一个错误“wait仅在异步函数中有效”,甚至我在函数后面加上了async
function function1(app){
    app.post('/test', (req, res, next) => {
        const url = `url1`;
        request(url, function(error, response, body) {
            if(!error && response.statusCode == 200) {
                var data = JSON.parse(body);
                var data2 = function2(data.id, data2);
                res.send(profileData);
            }
        });
    })
}

function function2(id, data2){
    const url = `url2/${id}`;
    request(url, function(error, response, body) {
        if(!error && response.statusCode == 200) {
            var data = JSON.parse(body);
            console.log(data); //output correct data
            console.log(data2); //undefined  
            return data;
        }
    });
}
function function1(app){
    app.post('/test', (req, res, next) => {
        const url = `url1`;
        request(url, async function(error, response, body) {
            if(!error && response.statusCode == 200) {
                var data = JSON.parse(body);
                var data2 = await function2(data.id);
                console.log(data2); //undefined  
                res.send(profileData);
            }
        });
    })
}


function function2(id) {
  const url = `url2/${id}`;
  return new Promise(function (resolve, reject) {
    request(url, function(error, response, body) {
      if(!error && response.statusCode == 200) {
        resolve(JSON.parse(body));
      } else {
        reject(error);
      }
    });
  });
}