OSDN Git Service

ループの最中に、新たなsetTimeoutを設定できないようにした
authordhrname <dhrname@users.sourceforge.jp>
Mon, 16 Sep 2013 14:32:39 +0000 (23:32 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Mon, 16 Sep 2013 14:32:39 +0000 (23:32 +0900)
tool/funcproto/sleep.js

index c99884e..9cc1dd0 100644 (file)
@@ -1,17 +1,21 @@
-/*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
@@ -21,8 +25,8 @@ Function.prototype.sleep = (function(){
     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
@@ -32,6 +36,13 @@ Function.prototype.sleep = (function(){
   };  \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
@@ -55,9 +66,4 @@ fn.sleep();
   __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