-/*MIT License*/\r
+/*MIT License\r
+Copyright (c) 2013 dhrname*/\r
\r
Function.prototype.sleep = (function(){\r
var num = [],\r
result = 0,\r
functionque = [],\r
se = setTimeout,\r
+ idse = null, //ID that a setTimeout method returns\r
f = function () {\r
+ clearTimeout(idse);\r
var s = functionque.shift();\r
result = s && s.call(s, result);\r
if (functionque.length > 0) {\r
- se(f, num.shift());\r
- } else { //Time Loop End\r
- result = 0; //Reset the result\r
+ idse = se(f, num.shift());\r
+ } else { //Time Loop End\r
+ result = 0; //Reset the result\r
+ idse = null; //Reset the id of a setTimeout method\r
}\r
s = void 0;\r
};\r
fque.push(this);\r
flen = fque.length;\r
num.push((arguments[0] || 0));\r
- if (flen === 1) {\r
- se(f, 0);\r
+ if ((flen === 1) && !idse) {\r
+ idse = se(f, 0);\r
} else if ((this !== fque[flen-2]) && (flen > 1)){\r
/*Input a back property to the previous function*/\r
this.back = fque[flen-2];\r
}; \r
})();\r
\r
+describe("Async::sleep", function() {\r
+ it("a sleep method chain", function() {\r
+ var f = function(){};\r
+ expect(f.sleep()).toEqual(f);\r
+ });\r
+});\r
+\r
function fn (result) {\r
var that = this;\r
describe("Async::sleep2", function() {\r
__start_();\r
}).sleep();\r
\r
-describe("Async::sleep", function() {\r
- it("a sleep method chain", function() {\r
- var f = function(){};\r
- expect(f.sleep()).toEqual(f);\r
- });\r
-});\r
+\r