1

我正在尝试使用节点请求模块从第三方服务获取一些数据,并将这些数据作为字符串从函数返回。我的看法是request()返回一个可读的流,因为你可以做到request(...).pipe(writeableStream)- 我认为 - 意味着我可以做到

function getData(){
    var string;

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

但这并没有真正起作用。我认为我对 request() 或节点流的真正工作方式有一些错误的看法。有人可以在这里消除我的困惑吗?

4

2 回答 2

5

它确实按照您解释的方式工作。也许您面临的问题是由于 node.js 的异步特性。我很确定你getData()是以同步方式调用你的。试试这个,看看你的request电话是否没有返回:

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

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

于 2014-06-29T16:35:13.213 回答
1

我得到的是您想string稍后访问,并且您认为它request会返回一个完整的字符串。如果是这样,您不能同步执行,您必须将代码stringend事件处理程序中处理完成,如下所示:

function getData(){
    var string;

    request('someurl')
        .on('data', function(data){
             string += data;
        })
        .on('end', function(){
            processString(string);
        });
}
getData();
于 2014-06-29T20:04:00.133 回答