forked from baconjs/bacon.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcallback.js
27 lines (24 loc) · 937 Bytes
/
callback.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// build-dependencies: core, combine, frombinder, flatmap
var liftCallback = function(desc, wrapped) {
return withMethodCallSupport(function(f, ...args) {
var stream = partiallyApplied(wrapped, [function(values, callback) {
return f(...values, callback);
}]);
return withDesc(new Bacon.Desc(Bacon, desc, [f, ...args]), Bacon.combineAsArray(args).flatMap(stream));
});
};
Bacon.fromCallback = liftCallback("fromCallback", function(f, ...args) {
return Bacon.fromBinder(function(handler) {
makeFunction(f, args)(handler);
return nop;
}, (function(value) { return [value, endEvent()]; }));
});
Bacon.fromNodeCallback = liftCallback("fromNodeCallback", function(f, ...args) {
return Bacon.fromBinder(function(handler) {
makeFunction(f, args)(handler);
return nop;
}, function(error, value) {
if (error) { return [new Error(error), endEvent()]; }
return [value, endEvent()];
});
});