2016-01-22 127 views
0

我執行「GET」請求一個URL取回的響應,所以我有一個處理請求請求模塊使用

var makeRequest = function(objs, callback){ 
    var url = 'adasda..'; 
    //... 
    var result = null; 
    request(url, function(error, response, body){ 
      if(!error && response.statusCode === 200){ 
       result = body; 
       callback(null, body) 
      } 
    }); 

    return result; 
} 

在我的主要功能的功能我正在調用上述功能

function main(values, callback){ 
    //...some logic 
    var newValue={....} 

    if(some conditional){ 
     newValue = makeRequest(values,callback); //newValue gets appended with new data 
    } 

    sendData(null, newValue, callback); //this function does a post 
} 

var sendData = function(....){} 

我注意到一旦makeRequest的得到執行,它會立即向前走,然後執行送出數據和那是因爲要求模塊是一個異步操作。

我該如何等待newValue對象被填充,然後sendData()應該被調用?

+0

你不能等。您必須在回調中使用響應,並且在收到響應後您想要執行的任何代碼必須實際處於回調中。這就是你如何編程異步響應。它與同步編程不同。副本中提供了許多示例。 – jfriend00

回答

0

等到回調觸發。我更新了你的代碼。

var makeRequest = function(objs, callback) { 
    var url = 'adasda..'; 

    request(url, function(error, response, body) { 
    if (!error && response.statusCode === 200) { 
     callback(null, body) 
    } 
    }); 
}; 

function main(values, callback) { 

    var newValue = {} 

    if (some conditional) { 
    makeRequest(values, function(error, result) { 
     // Call sendData once we get the data 
     sendData(null, result, callback); 
     callback(error, result); 
    }); 
    } 

} 

var sendData = function() {}; 

要避免嵌套的回調,可以使用Promises