Handle a blocking/result response that is demoted to async. (#199)

* If blocking/result response was demoted to async, complete the promise with a rejection.
* Add test case.
diff --git a/lib/actions.js b/lib/actions.js
index 059e112..e874bb2 100644
--- a/lib/actions.js
+++ b/lib/actions.js
@@ -45,7 +45,11 @@
   invoke (options) {
     options = options || {}
     if (options.blocking && options.result) {
-      return super.invoke(options).then(result => result.response.result)
+      return super.invoke(options).then(result => {
+        if (result.response) {
+          return result.response.result
+        } else return Promise.reject(result)
+      })
     }
 
     return super.invoke(options)
diff --git a/test/unit/actions.test.js b/test/unit/actions.test.js
index c52d580..9377cae 100644
--- a/test/unit/actions.test.js
+++ b/test/unit/actions.test.js
@@ -246,6 +246,25 @@
   })
 })
 
+test('should invoke action to retrieve result but request is demoted to async', t => {
+  t.plan(4)
+  const ns = '_'
+  const client = {}
+  const actions = new Actions(client)
+  const result = { activationId: '123456' }
+
+  client.request = (method, path, options) => {
+    t.is(method, 'POST')
+    t.is(path, `namespaces/${ns}/actions/12345`)
+    t.deepEqual(options.qs, { blocking: true })
+    return Promise.resolve(result)
+  }
+
+  return actions.invoke({ name: '12345', result: true, blocking: true }).catch(_result => {
+    t.deepEqual(_result, result)
+  })
+})
+
 test('should invoke action to retrieve result without blocking', t => {
   t.plan(4)
   const ns = '_'