Refactor _performRequest to use whenComplete, not finally
diff --git a/lib/src/web_driver.dart b/lib/src/web_driver.dart
index 9856950..5cae129 100644
--- a/lib/src/web_driver.dart
+++ b/lib/src/web_driver.dart
@@ -217,21 +217,40 @@
     }
   }
 
-  Future postRequest(String command, [params]) => _performRequest(
+  Future postRequest(String command, [params]) => _performRequestWithLog(
       () => _commandProcessor.post(_resolve(command), params),
       'POST',
       command,
       params);
 
-  Future getRequest(String command) => _performRequest(
+  Future getRequest(String command) => _performRequestWithLog(
       () => _commandProcessor.get(_resolve(command)), 'GET', command, null);
 
-  Future deleteRequest(String command) => _performRequest(
+  Future deleteRequest(String command) => _performRequestWithLog(
       () => _commandProcessor.delete(_resolve(command)),
       'DELETE',
       command,
       null);
 
+  Future _performRequestWithLog(
+      Function fn, String method, String command, params) async {
+    return await _performRequest(fn, method, command, params)
+        .whenComplete(() async {
+      if (notifyListeners) {
+        if (_previousEvent == null) {
+          throw new Error(); // This should be impossible.
+        }
+        _onCommandController.add(_previousEvent);
+        for (WebDriverListener listener in _commandListeners) {
+          await listener(_previousEvent);
+        }
+      }
+    });
+  }
+
+  // This is an ugly hack, I know, but I dunno how to cleanly do this.
+  var _previousEvent = null;
+
   Future _performRequest(
       Function fn, String method, String command, params) async {
     var startTime = new DateTime.now();
@@ -256,7 +275,7 @@
       return new Future.error(e, trace);
     } finally {
       if (notifyListeners) {
-        var event = new WebDriverCommandEvent(
+        _previousEvent = new WebDriverCommandEvent(
             method: method,
             endPoint: command,
             params: params,
@@ -265,11 +284,6 @@
             exception: exception,
             result: result,
             stackTrace: trace);
-
-        _onCommandController.add(event);
-        for (WebDriverListener listener in _commandListeners) {
-          await listener(event);
-        }
       }
     }
   }