Javascript 同步运行功能

Javascript 同步运行功能,javascript,node.js,request,Javascript,Node.js,Request,如何使requestAddress函数同步运行?我应该创建两个这样的函数并使用回调吗?我将如何进行回调?我似乎不明白如何处理这个案子 function requestAddress(urlCombined) { request(urlCombined, function (error, response, body) { a = JSON.parse(body); c = addressInfo.status; }); } function

如何使requestAddress函数同步运行?我应该创建两个这样的函数并使用回调吗?我将如何进行回调?我似乎不明白如何处理这个案子

function requestAddress(urlCombined) {
    request(urlCombined, function (error, response, body) {
        a = JSON.parse(body);

        c = addressInfo.status;

    });
}

function isValid() {

    // Retrieve address from input
    addressGet = $('#address').val();

    // Combine url to get address's information
    var urlCombined = 'websitehere' + something;

    requestAddress(urlCombined);


    //do something
    if (condition met) {
        return true;
    } else {
    return false;
    }
}

if (isValid()) {
    do something
}

您可以向requestAddress函数发送回调函数,并在请求完成后调用它。根据需要将参数发送回它-我已经在isValid中创建了一个匿名回调函数,但如果您愿意,它可以是一个单独命名的函数

function requestAddress(urlCombined, callback) {
    request(urlCombined, function (error, response, body) {
        a = JSON.parse(body);    
        c = addressInfo.status;
        callback(error, response, body);
    });
}

function isValid() {
    // Retrieve address from input
    addressGet = $('#address').val();

    // Combine url to get address's information
    var urlCombined = 'websitehere' + something;

    requestAddress(urlCombined, (error, response, body) => {
      //do something
      if (condition met) {
        return true;
      } else {
        return false;
      }
    });
}

if (isValid()) {
    do something
}

您可以按照自己的想法,尝试通过两次回调来解决此问题

或者试试新语法async/await

若请求是异步的,那个么就不是了。无论您创建了多少函数,您都无法将异步结果转换为同步结果。但是您可以更改requestAddress以接受第二个参数,即回调函数,然后可以在函数error、response、body{function中调用该函数。
function requestAddress() {
   return new Promise((resolve, reject) => {
      request(XXX,() =>{   
         // .....
         resolve(c)
      })
   })
}

async function isValid () {
    const res = await requestAddress(XXX)
    if () {} else {}
}