Przeglądaj źródła

fix : onError should not be call if error occur in onData.

Nicolas Cannasse 19 lat temu
rodzic
commit
3362d2c4b9
1 zmienionych plików z 12 dodań i 2 usunięć
  1. 12 2
      std/haxe/remoting/AsyncConnection.hx

+ 12 - 2
std/haxe/remoting/AsyncConnection.hx

@@ -50,14 +50,19 @@ class AsyncConnection implements Dynamic<AsyncConnection> {
 		h.setHeader("X-Haxe-Remoting","eval");
 		h.setHeader("X-Haxe-Remoting","eval");
 		h.setParameter("__x",__path.join("."));
 		h.setParameter("__x",__path.join("."));
 		h.onData = function(data : String) {
 		h.onData = function(data : String) {
+			var ok = true;
+			var v;
 			try {
 			try {
 				if( data.length < 3 || data.substr(0,3) != "hxr" )
 				if( data.length < 3 || data.substr(0,3) != "hxr" )
 					throw "Invalid response : '"+data+"'";
 					throw "Invalid response : '"+data+"'";
 				var s = new Unserializer(data.substr(3,data.length-3));
 				var s = new Unserializer(data.substr(3,data.length-3));
-				onData(s.unserialize());
+				v = s.unserialize();
 			} catch( err : Dynamic ) {
 			} catch( err : Dynamic ) {
+				ok = false;
 				me.onError(err);
 				me.onError(err);
 			}
 			}
+			if( ok )
+				onData(v);
 		};
 		};
 		h.onError = onError;
 		h.onError = onError;
 		h.request(true);
 		h.request(true);
@@ -72,14 +77,19 @@ class AsyncConnection implements Dynamic<AsyncConnection> {
 		h.setHeader("X-Haxe-Remoting","call");
 		h.setHeader("X-Haxe-Remoting","call");
 		h.setParameter("__x",s.toString());
 		h.setParameter("__x",s.toString());
 		h.onData = function(data : String) {
 		h.onData = function(data : String) {
+			var ok = true;
+			var v;
 			try {
 			try {
 				if( data.length < 3 || data.substr(0,3) != "hxr" )
 				if( data.length < 3 || data.substr(0,3) != "hxr" )
 					throw "Invalid response : '"+data+"'";
 					throw "Invalid response : '"+data+"'";
 				var s = new Unserializer(data.substr(3,data.length-3));
 				var s = new Unserializer(data.substr(3,data.length-3));
-				onData(s.unserialize());
+				v = s.unserialize();
 			} catch( err : Dynamic ) {
 			} catch( err : Dynamic ) {
+				ok = false;
 				me.onError(err);
 				me.onError(err);
 			}
 			}
+			if( ok )
+				onData(v);
 		};
 		};
 		h.onError = onError;
 		h.onError = onError;
 		h.request(true);
 		h.request(true);