Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit 16252f3

Browse files
committed
imporved async callback adding, without setinterval
1 parent f242489 commit 16252f3

File tree

7 files changed

+188
-155
lines changed

7 files changed

+188
-155
lines changed

dist/web3-light.js

Lines changed: 60 additions & 49 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3-light.js.map

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3-light.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3.js

Lines changed: 60 additions & 49 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3.js.map

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/web3.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/web3/filter.js

Lines changed: 60 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,50 @@ var getOptions = function (options) {
7474
};
7575
};
7676

77+
/**
78+
Adds the callback and sets up the methods, to iterate over the results.
79+
80+
@method addCallback
81+
@param {Object} self
82+
@param {funciton} callback
83+
*/
84+
var addCallback = function(self, callback) {
85+
86+
var onMessage = function (error, messages) {
87+
if (error) {
88+
return self.callbacks.forEach(function (callback) {
89+
callback(error);
90+
});
91+
}
92+
93+
messages.forEach(function (message) {
94+
message = self.formatter ? self.formatter(message) : message;
95+
self.callbacks.forEach(function (callback) {
96+
callback(null, message);
97+
});
98+
});
99+
};
100+
101+
// call getFilterLogs on start
102+
if (!utils.isString(self.options)) {
103+
self.get(function (err, messages) {
104+
// don't send all the responses to all the watches again... just to self one
105+
if (err) {
106+
callback(err);
107+
}
108+
109+
messages.forEach(function (message) {
110+
callback(null, message);
111+
});
112+
});
113+
}
114+
115+
RequestManager.getInstance().startPolling({
116+
method: self.implementation.poll.call,
117+
params: [self.filterId],
118+
}, self.filterId, onMessage, self.stopWatching.bind(self));
119+
};
120+
77121
var Filter = function (options, methods, formatter) {
78122
var self = this;
79123
var implementation = {};
@@ -83,64 +127,31 @@ var Filter = function (options, methods, formatter) {
83127
this.options = getOptions(options);
84128
this.implementation = implementation;
85129
this.callbacks = [];
130+
this.addCallbacks = [];
86131
this.formatter = formatter;
87132
this.implementation.newFilter(this.options, function(error, id){
88-
if(error)
133+
if(error) {
89134
self.filterError = error;
90-
else
135+
self.addCallbacks.forEach(function(callback){
136+
callback(error);
137+
});
138+
} else if(self.addCallbacks) {
91139
self.filterId = id;
140+
self.addCallbacks.forEach(function(callback){
141+
addCallback(self, callback);
142+
});
143+
self.addCallbacks = [];
144+
}
92145
});
93146
};
94147

95148
Filter.prototype.watch = function (callback) {
96-
var self = this;
97-
98-
// check inf an interval of 10ms if the filter id has arrived
99-
var intervalId = setInterval(function(){
100-
101-
if(self.filterId || self.filterError)
102-
clearInterval(intervalId);
103-
104-
if(!self.filterId)
105-
return;
149+
this.callbacks.push(callback);
106150

107-
self.callbacks.push(callback);
108-
109-
var onMessage = function (error, messages) {
110-
if (error) {
111-
return self.callbacks.forEach(function (callback) {
112-
callback(error);
113-
});
114-
}
115-
116-
messages.forEach(function (message) {
117-
message = self.formatter ? self.formatter(message) : message;
118-
self.callbacks.forEach(function (callback) {
119-
callback(null, message);
120-
});
121-
});
122-
};
123-
124-
// call getFilterLogs on start
125-
if (!utils.isString(self.options)) {
126-
self.get(function (err, messages) {
127-
// don't send all the responses to all the watches again... just to self one
128-
if (err) {
129-
callback(err);
130-
}
131-
132-
messages.forEach(function (message) {
133-
callback(null, message);
134-
});
135-
});
136-
}
137-
138-
RequestManager.getInstance().startPolling({
139-
method: self.implementation.poll.call,
140-
params: [self.filterId],
141-
}, self.filterId, onMessage, self.stopWatching.bind(self));
142-
143-
}, 10);
151+
if(this.filterId)
152+
addCallback(this, callback);
153+
else
154+
this.addCallbacks.push(callback);
144155
};
145156

146157
Filter.prototype.stopWatching = function () {

0 commit comments

Comments
 (0)