4

このコードが機能しない理由がわかりません

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')

私はレスラーで何かが欠けていますか?

4

2 に答える 2

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();
}

データが入ってくると、他の変数と同じように渡すことができます。

于 2013-07-10T07:22:28.950 に答える
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/');

この SO answerのようにコールバックを使用することもできます。

于 2013-07-10T07:33:09.447 に答える