File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11{
22 "env" : {
3- "node" : true
3+ "node" : true ,
4+ "es6" : true
5+ },
6+ "parserOptions" : {
7+ "ecmaVersion" : 2018
48 },
59 "extends" : " eslint:recommended" ,
610 "rules" : {
Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ declare class FeedParser extends stream.Transform {
1010 options : FeedParser . Options ;
1111
1212 read ( ) : FeedParser . Item | null ;
13+ [ Symbol . asyncIterator ] ( ) : AsyncGenerator < FeedParser . Item > ;
1314 resumeSaxError ( ) : void ;
1415
1516 on ( event : 'meta' , listener : ( meta : FeedParser . Meta ) => void ) : this;
Original file line number Diff line number Diff line change @@ -1237,4 +1237,45 @@ FeedParser.prototype._flush = function (done) {
12371237 * @typedef {import('readable-stream').Transform & FeedParserState } FeedParserInstance
12381238 */
12391239
1240+ /** @this {FeedParserInstance} */
1241+ FeedParser . prototype [ Symbol . asyncIterator ] = async function * ( ) {
1242+ var resolve = null ;
1243+ var error = null ;
1244+ var ended = false ;
1245+
1246+ function onReadable ( ) {
1247+ if ( resolve ) { resolve ( ) ; resolve = null ; }
1248+ }
1249+ function onEnd ( ) {
1250+ ended = true ;
1251+ if ( resolve ) { resolve ( ) ; resolve = null ; }
1252+ }
1253+ function onError ( err ) {
1254+ error = err ;
1255+ if ( resolve ) { resolve ( ) ; resolve = null ; }
1256+ }
1257+
1258+ this . on ( 'readable' , onReadable ) ;
1259+ this . on ( 'end' , onEnd ) ;
1260+ this . on ( 'error' , onError ) ;
1261+
1262+ try {
1263+ while ( true ) {
1264+ var item ;
1265+ while ( ( item = this . read ( ) ) !== null ) {
1266+ yield item ;
1267+ }
1268+ if ( ended ) break ;
1269+ if ( error ) throw error ;
1270+ await new Promise ( function ( r ) { resolve = r ; } ) ;
1271+ resolve = null ;
1272+ if ( error ) throw error ;
1273+ }
1274+ } finally {
1275+ this . removeListener ( 'readable' , onReadable ) ;
1276+ this . removeListener ( 'end' , onEnd ) ;
1277+ this . removeListener ( 'error' , onError ) ;
1278+ }
1279+ } ;
1280+
12401281exports = module . exports = FeedParser ;
Original file line number Diff line number Diff line change 1+ var FeedParser = require ( '../' ) ;
2+
3+ describe ( 'examples' , function ( ) {
4+ it ( 'should work as an async iterator' , async function ( ) {
5+ var feedparser = new FeedParser ( ) ;
6+ var feed = __dirname + '/feeds/rss2sample.xml' ;
7+ var items = [ ] ;
8+
9+ fs . createReadStream ( feed ) . pipe ( feedparser ) ;
10+
11+ for await ( const item of feedparser ) {
12+ items . push ( item ) ;
13+ }
14+
15+ assert . equal ( items . length , 4 ) ;
16+ } ) ;
17+ } ) ;
You can’t perform that action at this time.
0 commit comments