[英]Node.js Asynchronous return from HTTP request
我對JS和Node非常陌生。 我試圖從異步http請求返回一個變量,並且我認識到問題出在調用的異步性質上,但是盡管閱讀了多個教程,卻無法弄清楚如何制作一個非常簡單的代碼片段功能。
有人可以將其標記為可以工作,我可以對其進行消化和修改以供自己使用嗎? 我應該使用異步庫嗎? 我已經嘗試了兩次,但仍無法完成這項工作。
var request = require('request'); a = 0; a = foo(); function foo() { var num = 1; request('http://www.google.com', function (error, response, body) { // console.log('error:', error); // Print the error if one occurred //console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received //console.log('body:', body); // Print the HTML for the Google homepage. num = 3; return callback(num); }) return num; } console.log(a);
您必須/只能在其回調內處理異步調用的結果,因為
num
,並且 在您的示例代碼中,foo將始終立即返回1
而不管從request
返回的響應/正文如何。
因此,我將假設您正確地提出了請求,而將重點放在回調的概念上。 如果您嘗試此操作,但仍需要更多幫助,請告訴我。
我將嘗試使此代碼與您已有的代碼保持接近:
function foo(callback){
request('http://www.google.com', function (error, response, body) {
if(error)
console.log(error);
//console.log('statusCode:', response && response.statusCode);
// Print the response status code if a response was received
//console.log('body:', body); // Print the HTML for the Google homepage.
num = 3;
callback(num);
})
}
然后要打印3,您需要執行以下操作。
foo(function(value){
console.log(value);
})
在這種情況下,您將看到打印出的值3。
如果要返回更多,則只需3,就需要將它們作為參數傳遞給已傳入的回調函數。如果嘗試遵循回調樣式,則可能會更接近此值。
function foo(callback){
request('http://www.google.com', function (error, response, body) {
if(error)
callback(error,null);
//do what ever you need to with the response and body
num = 3;
callback(null,num);
})
}
foo(function(err, value){
if(err)
console.log(err);
console.log(value);
})
您只需要記住,像Rob提到的那樣,回調通常不會返回。 相反,您可以讓函數調用傳入的另一個函數,並為該函數提供函數確定的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.