@google-cloud/common
Advanced tools
Comparing version 0.7.1 to 0.8.0
{ | ||
"name": "@google-cloud/common", | ||
"version": "0.7.1", | ||
"version": "0.8.0", | ||
"author": "Google Inc.", | ||
@@ -5,0 +5,0 @@ "description": "Common components for Google Cloud APIs Node.js Client Libraries", |
@@ -23,16 +23,15 @@ /*! | ||
var events = require('events'); | ||
var modelo = require('modelo'); | ||
/** | ||
* @type {module:common/grpcService} | ||
* @type {module:common/grpcServiceObject} | ||
* @private | ||
*/ | ||
var GrpcService = require('./grpc-service.js'); | ||
var GrpcServiceObject = require('./grpc-service-object.js'); | ||
/** | ||
* @type {module:common/grpcServiceObject} | ||
* @type {module:common/operation} | ||
* @private | ||
*/ | ||
var GrpcServiceObject = require('./grpc-service-object.js'); | ||
var Operation = require('./operation.js'); | ||
@@ -105,12 +104,7 @@ /** | ||
Operation.call(this, config); | ||
GrpcServiceObject.call(this, config); | ||
events.EventEmitter.call(this); | ||
this.completeListeners = 0; | ||
this.hasActiveListeners = false; | ||
this.listenForEvents_(); | ||
} | ||
modelo.inherits(GrpcOperation, GrpcServiceObject, events.EventEmitter); | ||
modelo.inherits(GrpcOperation, GrpcServiceObject, Operation); | ||
@@ -138,81 +132,2 @@ /** | ||
/** | ||
* Wraps the `complete` and `error` events in a Promise. | ||
* | ||
* @return {promise} | ||
*/ | ||
GrpcOperation.prototype.promise = function() { | ||
var self = this; | ||
return new self.Promise(function(resolve, reject) { | ||
self | ||
.on('error', reject) | ||
.on('complete', function(metadata) { | ||
resolve([metadata]); | ||
}); | ||
}); | ||
}; | ||
/** | ||
* Begin listening for events on the operation. This method keeps track of how | ||
* many "complete" listeners are registered and removed, making sure polling is | ||
* handled automatically. | ||
* | ||
* As long as there is one active "complete" listener, the connection is open. | ||
* When there are no more listeners, the polling stops. | ||
* | ||
* @private | ||
*/ | ||
GrpcOperation.prototype.listenForEvents_ = function() { | ||
var self = this; | ||
this.on('newListener', function(event) { | ||
if (event === 'complete') { | ||
self.completeListeners++; | ||
if (!self.hasActiveListeners) { | ||
self.hasActiveListeners = true; | ||
self.startPolling_(); | ||
} | ||
} | ||
}); | ||
this.on('removeListener', function(event) { | ||
if (event === 'complete' && --self.completeListeners === 0) { | ||
self.hasActiveListeners = false; | ||
} | ||
}); | ||
}; | ||
/** | ||
* Poll `getMetadata` to check the operation's status. This runs a loop to ping | ||
* the API on an interval. | ||
* | ||
* Note: This method is automatically called once a "complete" event handler is | ||
* registered on the operation. | ||
* | ||
* @private | ||
*/ | ||
GrpcOperation.prototype.startPolling_ = function() { | ||
var self = this; | ||
if (!this.hasActiveListeners) { | ||
return; | ||
} | ||
this.getMetadata(function(err, resp) { | ||
if (err || resp.error) { | ||
self.emit('error', err || GrpcService.decorateStatus_(resp.result)); | ||
return; | ||
} | ||
if (!resp.done) { | ||
setTimeout(self.startPolling_.bind(self), 500); | ||
return; | ||
} | ||
self.emit('complete', resp); | ||
}); | ||
}; | ||
module.exports = GrpcOperation; |
@@ -36,2 +36,8 @@ /*! | ||
/** | ||
* @type {module:common/operation} | ||
* @private | ||
*/ | ||
exports.Operation = require('./operation.js'); | ||
/** | ||
* @type {module:common/paginator} | ||
@@ -38,0 +44,0 @@ * @private |
@@ -75,3 +75,3 @@ /** | ||
*/ | ||
var ApiError = createErrorClass('ApiError', function(errorBody) { | ||
util.ApiError = createErrorClass('ApiError', function(errorBody) { | ||
this.code = errorBody.code; | ||
@@ -103,10 +103,16 @@ this.errors = errorBody.errors; | ||
/** | ||
* Wrap the ApiError constructor so context isn't lost. | ||
* Custom error type for partial errors returned from the API. | ||
* | ||
* @param {object} errorBody - Error object. | ||
* @param {object} b - Error object. | ||
*/ | ||
util.ApiError = function(errorBody) { | ||
return new ApiError(errorBody); | ||
}; | ||
util.PartialFailureError = createErrorClass('PartialFailureError', function(b) { | ||
var errorObject = b; | ||
this.errors = errorObject.errors; | ||
this.response = errorObject.response; | ||
var defaultErrorMessage = 'A failure occurred during this request.'; | ||
this.message = errorObject.message || defaultErrorMessage; | ||
}); | ||
/** | ||
@@ -113,0 +119,0 @@ * Uniformly process an API response. |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
89597
13
2398