2017-07-24 110 views
0

我讓獲取請求從一個API獲取JSON數據並在獲取請求的回調中進行另一個POST調用,以將此數據發佈到另一個API。這似乎並沒有奏效。如果在GET請求回調中調用節點js POST請求不起作用

var request = require('request'); 

function startFetchingHistory(postToApp){ 
request.get(url, function(err, res, body) { 
    postToApp(body); 
}); 
} 



function postToApp(body) { 

var options = { 
uri: 'http://localhost:3079/history', 
method: 'POST', 
json : body 
}; 

request(options, function(error, response, body) { 
console.log(error+response+body); 
if (!error && response.statusCode == 200) { 
    console.log(body); 
} else { 
    logger.error('Error from server is' + error); 
    } 
    }); 
} 

上面不行。通過「不起作用」,我的意思是POST請求回調從不被調用。但是,如果我直接調用postToApp()方法,則POST請求會成功。

+0

你永遠不會調用任何這些功能的回調裏面你的API響應的正確方法? – DZDomi

回答

0

兩個重要概念

對Arg的實現這一種更好的方式
  1. request在本質上是異步當您從主處理器返回
  2. 稱爲
  3. API將返回

如果你看看你的功能postToApp,當你調用

請求(選項,功能(錯誤響應,身體){

這去你的事件循環和功能執行和完成而沒有等待通話後完成。

現在,你想要做什麼,等待函數postToApp來完成。最簡單和國際海事組織,要做到這一點,如果到postToApp

var request = require('request'); 

function startFetchingHistory(postToApp) { 
    request.get(url, function (err, res, body) { 
    postToApp(body, (postResponse) => { 
     //respond back with the result/error to your API 
    }); 
    }); 
} 



function postToApp(body, callback) { 
    var options = { 
    uri: 'http://localhost:3079/history', 
    method: 'POST', 
    json: body 
    }; 
    request(options, function (error, response, body) { 
    console.log(error + response + body); 
    if (!error && response.statusCode == 200) { 
     console.log(body); 
     callback(body) // call the function back with the data you want to process; 
    } else { 
     logger.error('Error from server is' + error); 
     callback(error) // call the function back with error to process; 
    } 
    }); 
} 
0

可能是因爲postToApp()需要變量'request',它正在由它在(request.get)中的異步函數使用。

嘗試製作另一個var innerRequest = require('request');並將其用於postToApp()。

旁註:我覺得有可能是通過在startFetchingHistory(範圍的身體恢復到一個變量),並使用它作爲postToApp()