码农干货系列【6】--javascript异步编程之:世界上最短的Promise库
2013-02-24 21:12 【当耐特】 阅读(6624) 评论(13) 编辑 收藏 举报类库源码
var Promise = function () { this.thens = []; }; Promise.prototype = { resolve: function () { var t = this.thens.shift(), n; t && (n = t.apply(null, arguments), n instanceof Promise && (n.thens = this.thens)); }, then: function (n) { return this.thens.push(n), this; } }
使用方式
function f1() { var promise = new Promise(); setTimeout(function () { alert(1); promise.resolve(); }, 1500) return promise; } function f2() { var promise = new Promise(); setTimeout(function () { alert(2); promise.resolve(); }, 1500) return promise; } function f3() { var promise = new Promise(); setTimeout(function () { alert(3); promise.resolve(); }, 1500) return promise; } function f4() { alert(4); } f1().then(f2).then(f3).then(f4)
类库思路
主要的思路就是将主Promise下的任务列表(thens)挂靠到子Promise下。当然该库可以封装至ajax、domready等耗时的场景当中,使其可以”thenable",如:
$$.ajax("assets/xxx.php", { method: "GET", data: "q=1&rand=" + Math.random() }).then(function (msg) { alert(msg.responseText) });have fun! = =!