为什么request.on()不能在Node.js中工作

我正在尝试使用节点请求模块从第三方服务获取一些数据,并将该数据作为string从函数中返回。 我的看法是, request()返回一个可读的stream,因为你可以做request(...).pipe(writeableStream) – 我认为 – 暗示我可以做

 function getData(){ var string; request('someurl') .on('data', function(data){ string += data; }) .on('end', function(){ return string; }); } 

但是这并不是真的有用。 我想我对request()或节点stream如何真正起作用有一些错误的认识。 有人可以澄清我的困惑吗?

它确实按照你解释的方式工作。 也许你面临的问题是由于node.js的asynchronous性质。 我很确定你以同步的方式调用你的getData() 。 试试看,如果你是request调用不返回的东西:

 request('someurl') .on('data', function(data){ console.log(data.toString()); .on('end', function(){ console.log("This is the end..."); }); 

看看这篇文章在这里 。 这并不简短,但它解释了如何编写你的代码来处理这种情况。

我得到的是你想稍后访问string ,你认为request会返回一个完整的string。 如果是这样,你不能同步做到这一点,你必须把你的代码来处理完成的string在这样的end事件处理程序:

 function getData(){ var string; request('someurl') .on('data', function(data){ string += data; }) .on('end', function(){ processString(string); }); } getData();