2013-07-10 42 views
4

我不明白爲什麼這個代碼不爲我獲取使用restler在Node.js的

var rest = require('restler'); 

var getResp = function(url){ 
     var resp =""; 
     rest.get(url).on('complete',function(response){ 
      resp = response.toString(); 
     }); 
     return resp; 
    }; 

我沒有得到的getResp('google.com')

響應工作,我失去的東西HTTP響應restler?

+0

你試過'getResp('http://google.com')'? –

+0

東西..我得到'''' –

回答

4

因爲你正在返回resp它看起來像你忘記了請求是異步的。請嘗試以下操作:

var rest = require('restler'); 

var getResp = function(url){ 
    rest.get(url).on('complete', function(response){ 
    console.log(response); 
    }); 
}; 

getResp('http://google.com/'); 

// output: 
// <!doctype html><html itemscope="itemscope" .... 

由於其異步性質,最好將值傳遞給接收回調。以這個小例子爲例:

var rest = require('restler'); 

// process an array of URLs 
['http://google.com/', 
'http://facebook.com/'].forEach(function(item) { 
    getResp(item); 
}); 

function getResp(url){ 
    rest.get(url).on('complete', function(response){ 
    processResponse(response); 
    }); 
}; 

// data will be a Buffer 
function processResponse(data) { 
    // converting Buffers to strings is expensive, so I prefer 
    // to do it explicitely when required 
    var str = data.toString(); 
} 

數據一旦進入,您就可以像其他變量一樣傳遞它。

+0

如何在變量後得到這個? –

+0

@NickGinanto我已經添加了一個如何傳遞響應的例子。 –

1

return resp;在調用on('complete'回調之前正在運行,因爲它是異步的。結果是resp變量永遠不會被分配一個值。

試試這個:

var rest = require('restler'); 

var getResp = function(url){ 
    var result = rest.get(url).on('complete', function(response){ 
    response; 
    }); 
    return result; 
}; 

getResp('http://google.com/'); 

你也可以在this SO answer使用回調等。

+0

你不是指'返回結果'嗎? –

+0

是的。我只是修復它。 –