Skip to content

Commit f919a6b

Browse files
Merge pull request #166 from stephenplusplus/nexttick
connection: use setImmediate to simulate async.
2 parents 436b90c + 60f5256 commit f919a6b

5 files changed

Lines changed: 57 additions & 31 deletions

File tree

lib/common/connection.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,8 @@ Connection.prototype.fetchToken = function(callback) {
161161
}, function(err, res, body) {
162162
if (err || !body.access_token) {
163163
// TODO: Provide better context about the error here.
164-
return callback(err);
164+
callback(err);
165+
return;
165166
}
166167
var exp = new Date(body.token_expires * 1000);
167168
callback(null, new Token(body.access_token, exp));
@@ -172,7 +173,8 @@ Connection.prototype.fetchToken = function(callback) {
172173
// read key file once and cache the contents.
173174
fs.readFile(this.opts.keyFilename, function(err, data) {
174175
if (err) {
175-
return callback(err);
176+
callback(err);
177+
return;
176178
}
177179
that.credentials = JSON.parse(data);
178180
that.fetchServiceAccountToken_(callback);
@@ -197,11 +199,13 @@ Connection.prototype.fetchServiceAccountToken_ = function(callback) {
197199
scope: this.scopes.join(' ')
198200
}, function(err) {
199201
if (err) {
200-
return callback(err);
202+
callback(err);
203+
return;
201204
}
202205
gapi.getToken(function(err) {
203206
if (err) {
204-
return callback(err);
207+
callback(err);
208+
return;
205209
}
206210
var exp = new Date(gapi.token_expires * 1000);
207211
callback(null, new Token(gapi.token, exp));
@@ -260,7 +264,7 @@ Connection.prototype.createAuthorizedReq = function(reqOpts, callback) {
260264
}
261265

262266
if (this.isConnected()) {
263-
onConnected();
267+
setImmediate(onConnected);
264268
return;
265269
}
266270

lib/datastore/dataset.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,8 @@ Dataset.prototype.runInTransaction = function(fn, callback) {
290290
var newTransaction = this.createTransaction_();
291291
newTransaction.begin(function(err) {
292292
if (err) {
293-
return callback(err);
293+
callback(err);
294+
return;
294295
}
295296
fn(newTransaction, newTransaction.finalize.bind(newTransaction, callback));
296297
});
@@ -329,7 +330,8 @@ Dataset.prototype.allocateIds = function(incompleteKey, n, callback) {
329330
new pb.AllocateIdsRequest({ key: incompleteKeys }),
330331
pb.AllocateIdsResponse, function(err, resp) {
331332
if (err) {
332-
return callback(err);
333+
callback(err);
334+
return;
333335
}
334336
var keys = [];
335337
(resp.key || []).forEach(function(k) {

lib/datastore/transaction.js

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,12 @@ Transaction.prototype.begin = function(callback) {
9595
var req = new pb.BeginTransactionRequest();
9696
var res = pb.BeginTransactionResponse;
9797
this.makeReq('beginTransaction', req, res, function(err, resp) {
98-
if (!err) {
99-
that.id = resp.transaction;
98+
if (err) {
99+
callback(err);
100+
return;
100101
}
101-
callback(err);
102+
that.id = resp.transaction;
103+
callback(null);
102104
});
103105
};
104106

@@ -122,10 +124,12 @@ Transaction.prototype.rollback = function(callback) {
122124
var req = new pb.RollbackRequest({ transaction: this.id });
123125
var res = pb.RollbackResponse;
124126
this.makeReq('rollback', req, res, function(err) {
125-
if (!err) {
126-
that.isFinalized = true;
127+
if (err) {
128+
callback(err);
129+
return;
127130
}
128-
callback(err);
131+
that.isFinalized = true;
132+
callback(null);
129133
});
130134
};
131135

@@ -149,10 +153,12 @@ Transaction.prototype.commit = function(callback) {
149153
var req = new pb.CommitRequest({ transaction: this.id });
150154
var res = pb.CommitResponse;
151155
this.makeReq('commit', req, res, function(err) {
152-
if (!err) {
153-
that.isFinalized = true;
156+
if (err) {
157+
callback(err);
158+
return;
154159
}
155-
callback(err);
160+
that.isFinalized = true;
161+
callback(null);
156162
});
157163
};
158164

@@ -172,9 +178,10 @@ Transaction.prototype.commit = function(callback) {
172178
*/
173179
Transaction.prototype.finalize = function(callback) {
174180
if (!this.isFinalized) {
175-
return this.commit(callback);
181+
this.commit(callback);
182+
return;
176183
}
177-
callback();
184+
setImmediate(callback);
178185
};
179186

180187
/**
@@ -303,7 +310,8 @@ Transaction.prototype.save = function(entities, callback) {
303310
var res = pb.CommitResponse;
304311
this.makeReq('commit', req, res, function(err, resp) {
305312
if (err || !resp) {
306-
return callback(err);
313+
callback(err);
314+
return;
307315
}
308316
var autoInserted = (resp.mutation_result.insert_auto_id_key || []);
309317
autoInserted.forEach(function(key, index) {
@@ -387,7 +395,8 @@ Transaction.prototype.runQuery = function(q, callback) {
387395
var res = pb.RunQueryResponse;
388396
this.makeReq('runQuery', req, res, function(err, resp) {
389397
if (err || !resp.batch || !resp.batch.entity_result) {
390-
return callback(err);
398+
callback(err);
399+
return;
391400
}
392401
var nextQuery = null;
393402
if (resp.batch.end_cursor) {
@@ -451,7 +460,7 @@ Transaction.prototype.makeReq = function(method, req, respType, callback) {
451460
callback(err);
452461
return;
453462
}
454-
callback(null, respType.decode(buffer));
463+
callback(null, respType.decode(buffer));
455464
});
456465
});
457466
});

lib/pubsub/index.js

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,11 @@ Subscription.prototype.del = function(callback) {
137137
});
138138
this.conn.makeReq('DELETE', path, null, true, function(err) {
139139
if (err) {
140-
return callback(err);
140+
callback(err);
141+
return;
141142
}
142143
that.closed = true;
143-
callback(err);
144+
callback(null);
144145
});
145146
};
146147

@@ -264,7 +265,8 @@ Connection.prototype.listSubscriptions = function(query, callback) {
264265

265266
this.makeReq('GET', 'subscriptions', q, true, function(err, result) {
266267
if (err) {
267-
return callback(err);
268+
callback(err);
269+
return;
268270
}
269271
var items = result.subscription || [];
270272
var subscriptions = items.map(function(item) {
@@ -351,7 +353,10 @@ Connection.prototype.listTopics = function(query, callback) {
351353
var q = util.extend({}, query);
352354
q.query = 'cloud.googleapis.com/project in (' + this.fullProjectName_() + ')';
353355
this.makeReq('GET', 'topics', q, true, function(err, result) {
354-
if (err) { return callback(err); }
356+
if (err) {
357+
callback(err);
358+
return;
359+
}
355360
var items = result.topic || [];
356361
var topics = items.map(function(item) {
357362
return new Topic(that, item.name);
@@ -372,13 +377,14 @@ Connection.prototype.listTopics = function(query, callback) {
372377
*/
373378
Connection.prototype.getTopic = function(name, callback) {
374379
var that = this;
375-
var cb = callback || util.noop;
380+
callback = callback || util.noop;
376381
var fullName = this.fullTopicName_(name);
377382
this.makeReq('GET', 'topics/' + fullName, null, true, function(err) {
378383
if (err) {
379-
return cb(err);
384+
callback(err);
385+
return;
380386
}
381-
cb(null, new Topic(that, fullName));
387+
callback(null, new Topic(that, fullName));
382388
});
383389
};
384390

@@ -389,10 +395,14 @@ Connection.prototype.getTopic = function(name, callback) {
389395
*/
390396
Connection.prototype.createTopic = function(name, callback) {
391397
var that = this;
392-
var cb = callback || util.noop;
398+
callback = callback || util.noop;
393399
var fullName = this.fullTopicName_(name);
394400
this.makeReq('POST', 'topics', null, { name: fullName }, function(err) {
395-
cb(err, new Topic(that, fullName));
401+
if (err) {
402+
callback(err);
403+
return;
404+
}
405+
callback(null, new Topic(that, fullName));
396406
});
397407
};
398408

lib/storage/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,8 @@ Bucket.prototype.list = function(query, callback) {
161161
}
162162
this.makeReq('GET', 'o', query, true, function(err, resp) {
163163
if (err) {
164-
return callback(err);
164+
callback(err);
165+
return;
165166
}
166167
var nextQuery = null;
167168
if (resp.nextPageToken) {

0 commit comments

Comments
 (0)