为什么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();