typescript-closure-tools
Version:
Command-line tools to convert closure-style JSDoc annotations to typescript, and to convert typescript sources to closure externs files
330 lines (289 loc) • 6.71 kB
text/typescript
/// <reference path="jsdeferred.d.ts"/>
declare function alert(a: any): void;
interface IHttp {
get (url: string): Deferred;
}
var http: IHttp;
Deferred.define();
next(function () {
alert("Hello!");
return wait(5);
}).
next(function () {
alert("World!");
});
Deferred.next(function () {
alert("Hello!");
return Deferred.wait(5);
}).
next(function () {
alert("World!");
});
// http.get is assumed to be a function that takes a URI as an argument and returns a Deferred instance
var results = [];
next(function () {
return http.get("/foo.json").next(function (data) {
results.push(data);
});
}).
next(function () {
return http.get("/baz.json").next(function (data) {
results.push(data);
});
}).
next(function () {
return http.get("/baz.json").next(function (data) {
results.push(data);
});
}).
next(function () {
alert(results);
});
var wants = ["/foo.json", "/bar.json", "/baz.json"];
var results = [];
loop(wants.length, function (i) {
return http.get(wants[i]).next(function (data) {
results.push(data);
});
}).
next(function () {
alert(results);
});
parallel([
http.get("/foo.json"),
http.get("/bar.json"),
http.get("/baz.json")
]).
next(function (results) {
alert(results);
});
next(function () {
// something 1
}).
next(function () {
// asynchronous process
throw "error!";
}).
next(function () {
// something 2 (not executed as an error occurs in the previous process)
});
next(function () {
// something 1
}).
next(function () {
// asynchronous process
throw "error!";
}).
next(function () {
// something 2 (not executed as an error occurs in the previous process)
}).
error(function (e) {
alert(e);
});
next(function () {
// something 1
}).
next(function () {
// asynchronous process
throw "error!";
}).
error(function (e) {
alert(e);
}).
next(function () {
// something 2 (executed since the exception would already be handled)
}).
error(function (e) {
alert(e);
});
next(function () {
alert("Hello!");
return wait(5);
}).
next(function () {
alert("World!");
});
next(function () {
alert(1);
return next(function () {
alert(2);
}).
next(function () {
alert(3);
});
}).
next(function () {
alert(4);
});
(() => {
var d = new Deferred();
var x = new XMLHttpRequest();
x.onreadystatechange = function () {
if (x.readyState == 4) {
if (x.status == 200) d.call(x); else d.fail(x);
}
};
return d;
})();
loop(1000, function (n) {
// heavy process
});
next(function () {
console.log("start");
}).
next(function () {
function pow (x, n) {
function _pow (n, r) {
console.log([n, r]);
if (n == 0) return r;
return call(_pow, n - 1, x * r);
}
return call(_pow, n, 1);
}
return call(pow, 2, 10);
}).
next(function (r) {
console.log([r, "end"]);
}).
error(function (e) {
alert(e);
})
$.get("README.markdown").next(function (data) {
console.log(data);
});
console.log("start. gathering data.");
parallel([$.get("README.markdown"), $.get("ChangeLog")]).
next(function (values) {
var lengths = $.map(values, function (i) { return i.length });
console.log(lengths.join(", "));
});
console.log("start. gathering data.");
parallel({html: $.get("README.markdown"), js: $.get("ChangeLog")}).
next(function (values) {
console.log(["html=", values.html.length, " js=", values.js.length].join(""));
});
console.log("start. wait 3 sec.");
var list = [];
var printAndReturn = function (i) { console.log(i+"msec elapsed"); return i; };
list.push(wait(0).next(printAndReturn));
list.push(wait(1).next(printAndReturn));
list.push(wait(2).next(printAndReturn));
list.push(wait(3).next(printAndReturn));
parallel(list).next(function (values) {
console.log("Completed. values: "+values.join(", "));
});
var queue = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var workers = new Array(2);
var work = function (job) {
console.log('working... ' + job);
return wait(Math.random() * 4);
};
for (var i = 0, len = workers.length; i < len; i++) {
workers[i] = next(function me () {
var job = queue.shift();
if (!job) return;
console.log("start worker: " + job);
return next(function () { return job }).
next(work).
next(me);
}).
error(function (e) {
alert(e);
});
}
parallel(workers).next(function () {
console.log('all done!');
});
next(function () {
var sum = 0;
return loop({end:100000, step:1000}, function (n: number, o?: any) {
console.log(["Processing divided loop:n=", n, ", sum=", sum, " last?=", o.last].join(""));
for (var i = 0; i < o.step; i++) {
// console.log(i + n);
sum += i + n;
}
console.log(["sum=", sum].join(""));
return sum;
});
}).
next(function (e) {
console.log("Result:"+e);
console.log("end");
}).
error(function (e) {
console.log(e);
});
loop({begin: 1, end:100, step:10}, function (n: number, o?: any) {
console.log(["Processing divided loop:n=", n, " last?=", o.last].join(""));
for (var i = 0; i < o.step; i++) {
var j = n + i;
console.log(j);
}
});
Deferred.repeat(100, function (n, o?) {
console.log(n);
for (var i = 0; i < Math.pow(n, 2); i++) {
for (var j = n; j; j--);
}
});
loop(10, function (n) {
console.log(n);
return wait(0.1);
});
loop(10, function (n) {
console.log(String.fromCharCode(97+n));
return wait(0.2);
});
console.log(0);
loop(10, function (n) {
console.log(n);
return n;
}).
wait(1).
loop(10, function (n) {
var c = String.fromCharCode(97+n);
console.log(c);
return c;
}).
next(function (i) {
console.log("end");
}).
error(function (e) {
alert(e);
});
loop(5, function (i, o?) {
console.log(i);
return o.last? i : wait(1);
}).
next(function (e) {
console.log("end ["+e+"]");
}).
error(function (e) {
console.log(e);
});
next(function (i) {
function delayloop (i) {
console.log(i++);
if (i < 5) {
return wait(1).next(function () {
return call(delayloop, i);
});
}
}
return call(delayloop, 0);
}).
next(function (e) {
console.log("end");
}).
error(function (e) {
console.log(e);
});
var deferred = new Deferred();
$("#step-run").click(function () { deferred.call() });
loop(5, function (i) {
console.log("running... " + i);
return deferred;
}).
next(function () {
console.log("completed");
});