如何检查一个对象是否是一个node.jsstream实例?

我试图检查某个对象( this )是否是一个stream实例。 我很难确定它是否仍然是this函数的内核,就像函数被触发一样。

我已经尝试过typeof this ,它返回一个object 。 我已经看过这个问题,没有find明确的答案..任何build议? 谢谢之前

 StreamName.prototype._getEndpointData = function ( endpoint ) { /* Make a request based on a specific endpoint */ var apikey = this.source.apikey; request.getAsync( { headers: { // 'content-type' : 'application/x-www-form-urlencoded', 'User-Agent': 'request', 'Authorization': getAuthByApikey( apikey ) }, url: generateUrl( apikey, endpoint ) }) .get( 1 ) // get the body .then( function ( body ) { if ( body == 'Authentication Failed' ) { throw new Error( body ); } return body; }) .then( JSON.parse ) .then( function ( body ) { if ( body.status == 500 ) { throw new Error( body.message || 'MailChimp API request error'); } // collections: lists, campaigns & reports var collection = body[ endpoint ]; for (var i in collection ){ var instanceEndpoint = endpoint + '/' + collection[i].id; request.getAsync( { headers: { 'User-Agent': 'request', 'Authorization': getAuthByApikey( apikey ) }, url: generateUrl( apikey, instanceEndpoint ) }) .get( 1 ) // get the body // .then( console.log) .then( function ( body ) { if ( body == 'Authentication Failed' ) { throw new Error( body ); } return body; }) .then( JSON.parse ) .then( function ( body ) { return body; }) .then( this.push.bind( this ) ) // Getting an error Unhandled rejection TypeError: Cannot read property 'bind' of undefined // IS 'THIS' as the same as it was at top of the function? .then( this.push.bind( this, null ) ) .catch( this.emit.bind( this, 'error' ) ); } }) } 

这里指的是request.getAsync

 .then( this.push.bind( this, null ) ) 

您需要this引用保存到函数开头的某个variables中,然后您可以参考它

 StreamName.prototype._getEndpointData = function ( endpoint ) { /* Make a request based on a specific endpoint */ var apikey = this.source.apikey; var _stream = this; request.getAsync( { headers: { // 'content-type' : 'application/x-www-form-urlencoded', 'User-Agent': 'request', 'Authorization': getAuthByApikey( apikey ) }, url: generateUrl( apikey, endpoint ) }) .get( 1 ) // get the body .then( function ( body ) { if ( body == 'Authentication Failed' ) { throw new Error( body ); } return body; }) .then( JSON.parse ) .then( function ( body ) { if ( body.status == 500 ) { throw new Error( body.message || 'MailChimp API request error'); } // collections: lists, campaigns & reports var collection = body[ endpoint ]; for (var i in collection ){ var instanceEndpoint = endpoint + '/' + collection[i].id; request.getAsync( { headers: { 'User-Agent': 'request', 'Authorization': getAuthByApikey( apikey ) }, url: generateUrl( apikey, instanceEndpoint ) }) .get( 1 ) // get the body // .then( console.log) .then( function ( body ) { if ( body == 'Authentication Failed' ) { throw new Error( body ); } return body; }) .then( JSON.parse ) .then( function ( body ) { return body; }) .then( _stream.push.bind( this ) ) //should replace this with _stream .then( _stream.push.bind( this, null ) ) .catch( _stream.emit.bind( this, 'error' ) ); } }) } 

你应该使用instanceof操作符:

 var stream = require('stream'); var isStream = this instanceof stream.Readable; 

尽pipe可能还有其他的一些问题,你可以在这里阅读: nodejs:检查variables是否可读