diff --git a/dom/bindings/IterableIterator.cpp b/dom/bindings/IterableIterator.cpp
index 438d581786d15f932c491b521face9c0647e485a..88680ac1ecb9b3a6cd1f78ce9bed4fd48a964f26 100644
--- a/dom/bindings/IterableIterator.cpp
+++ b/dom/bindings/IterableIterator.cpp
@@ -67,26 +67,28 @@ void KeyAndValueReturn(JSContext* aCx, JS::Handle<JS::Value> aKey,
   aResult.set(&dictValue.toObject());
 }
 
-void ResolvePromiseForFinished(JSContext* aCx, Promise* aPromise,
-                               ErrorResult& aRv) {
+void ResolvePromiseForFinished(JSContext* aCx, Promise* aPromise) {
   MOZ_ASSERT(aPromise);
 
+  ErrorResult error;
   JS::Rooted<JSObject*> dict(aCx);
-  DictReturn(aCx, &dict, true, JS::UndefinedHandleValue, aRv);
-  if (aRv.Failed()) {
+  DictReturn(aCx, &dict, true, JS::UndefinedHandleValue, error);
+  if (error.Failed()) {
+    aPromise->MaybeReject(std::move(error));
     return;
   }
   aPromise->MaybeResolve(dict);
 }
 
 void ResolvePromiseWithKeyOrValue(JSContext* aCx, Promise* aPromise,
-                                  JS::Handle<JS::Value> aKeyOrValue,
-                                  ErrorResult& aRv) {
+                                  JS::Handle<JS::Value> aKeyOrValue) {
   MOZ_ASSERT(aPromise);
 
+  ErrorResult error;
   JS::Rooted<JSObject*> dict(aCx);
-  DictReturn(aCx, &dict, false, aKeyOrValue, aRv);
-  if (aRv.Failed()) {
+  DictReturn(aCx, &dict, false, aKeyOrValue, error);
+  if (error.Failed()) {
+    aPromise->MaybeReject(std::move(error));
     return;
   }
   aPromise->MaybeResolve(dict);
@@ -94,13 +96,14 @@ void ResolvePromiseWithKeyOrValue(JSContext* aCx, Promise* aPromise,
 
 void ResolvePromiseWithKeyAndValue(JSContext* aCx, Promise* aPromise,
                                    JS::Handle<JS::Value> aKey,
-                                   JS::Handle<JS::Value> aValue,
-                                   ErrorResult& aRv) {
+                                   JS::Handle<JS::Value> aValue) {
   MOZ_ASSERT(aPromise);
 
+  ErrorResult error;
   JS::Rooted<JSObject*> dict(aCx);
-  KeyAndValueReturn(aCx, aKey, aValue, &dict, aRv);
-  if (aRv.Failed()) {
+  KeyAndValueReturn(aCx, aKey, aValue, &dict, error);
+  if (error.Failed()) {
+    aPromise->MaybeReject(std::move(error));
     return;
   }
   aPromise->MaybeResolve(dict);
diff --git a/dom/bindings/IterableIterator.h b/dom/bindings/IterableIterator.h
index 2534fbbecc88d382360e1895a7aa7fd0e1eb6b77..6a5080deb3af764f4c5522f384d7bbb65e355501 100644
--- a/dom/bindings/IterableIterator.h
+++ b/dom/bindings/IterableIterator.h
@@ -47,17 +47,14 @@ void KeyAndValueReturn(JSContext* aCx, JS::Handle<JS::Value> aKey,
                        JS::Handle<JS::Value> aValue,
                        JS::MutableHandle<JSObject*> aResult, ErrorResult& aRv);
 
-void ResolvePromiseForFinished(JSContext* aCx, Promise* aPromise,
-                               ErrorResult& aRv);
+void ResolvePromiseForFinished(JSContext* aCx, Promise* aPromise);
 
 void ResolvePromiseWithKeyOrValue(JSContext* aCx, Promise* aPromise,
-                                  JS::Handle<JS::Value> aKeyOrValue,
-                                  ErrorResult& aRv);
+                                  JS::Handle<JS::Value> aKeyOrValue);
 
 void ResolvePromiseWithKeyAndValue(JSContext* aCx, Promise* aPromise,
                                    JS::Handle<JS::Value> aKey,
-                                   JS::Handle<JS::Value> aValue,
-                                   ErrorResult& aRv);
+                                   JS::Handle<JS::Value> aValue);
 }  // namespace iterator_utils
 
 class IterableIteratorBase : public nsISupports {
diff --git a/dom/bindings/test/TestInterfaceAsyncIterableDouble.cpp b/dom/bindings/test/TestInterfaceAsyncIterableDouble.cpp
index f2d888b518e8895fe271669eaedb4ea4556103d2..dd243ebf318e38d5c40bee0057fb1146c3fd4fae 100644
--- a/dom/bindings/test/TestInterfaceAsyncIterableDouble.cpp
+++ b/dom/bindings/test/TestInterfaceAsyncIterableDouble.cpp
@@ -90,34 +90,33 @@ void TestInterfaceAsyncIterableDouble::ResolvePromise(Iterator* aIterator) {
 
   AutoJSAPI jsapi;
   if (NS_WARN_IF(!jsapi.Init(mParent))) {
+    data->mPromise->MaybeRejectWithInvalidStateError(
+        "Couldn't get the global.");
     return;
   }
   JSContext* cx = jsapi.cx();
-  ErrorResult rv;
 
   // Test data: ['a', 'b'], ['c', 'd'], ['e', 'f']
   uint32_t idx = data->mIndex;
   if (idx >= mValues.Length()) {
-    iterator_utils::ResolvePromiseForFinished(cx, data->mPromise, rv);
+    iterator_utils::ResolvePromiseForFinished(cx, data->mPromise);
   } else {
     JS::Rooted<JS::Value> key(cx);
     JS::Rooted<JS::Value> value(cx);
     switch (aIterator->GetIteratorType()) {
       case IterableIteratorBase::IteratorType::Keys:
         Unused << ToJSValue(cx, mValues[idx].first, &key);
-        iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, key,
-                                                     rv);
+        iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, key);
         break;
       case IterableIteratorBase::IteratorType::Values:
         Unused << ToJSValue(cx, mValues[idx].second, &value);
-        iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, value,
-                                                     rv);
+        iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, value);
         break;
       case IterableIteratorBase::IteratorType::Entries:
         Unused << ToJSValue(cx, mValues[idx].first, &key);
         Unused << ToJSValue(cx, mValues[idx].second, &value);
         iterator_utils::ResolvePromiseWithKeyAndValue(cx, data->mPromise, key,
-                                                      value, rv);
+                                                      value);
         break;
     }
 
diff --git a/dom/bindings/test/TestInterfaceAsyncIterableDoubleUnion.cpp b/dom/bindings/test/TestInterfaceAsyncIterableDoubleUnion.cpp
index cc76efb616df10c7490f52a0ba1c6a3b8da23861..568e316c424763823b665daefc3dee29224c87a4 100644
--- a/dom/bindings/test/TestInterfaceAsyncIterableDoubleUnion.cpp
+++ b/dom/bindings/test/TestInterfaceAsyncIterableDoubleUnion.cpp
@@ -97,35 +97,34 @@ void TestInterfaceAsyncIterableDoubleUnion::ResolvePromise(
 
   AutoJSAPI jsapi;
   if (NS_WARN_IF(!jsapi.Init(mParent))) {
+    data->mPromise->MaybeRejectWithInvalidStateError(
+        "Couldn't get the global.");
     return;
   }
   JSContext* cx = jsapi.cx();
-  ErrorResult rv;
 
   // Test data:
   // [long, 1], [string, "a"]
   uint32_t idx = data->mIndex;
   if (idx >= mValues.Length()) {
-    iterator_utils::ResolvePromiseForFinished(cx, data->mPromise, rv);
+    iterator_utils::ResolvePromiseForFinished(cx, data->mPromise);
   } else {
     JS::Rooted<JS::Value> key(cx);
     JS::Rooted<JS::Value> value(cx);
     switch (aIterator->GetIteratorType()) {
       case IterableIteratorBase::IteratorType::Keys:
         Unused << ToJSValue(cx, mValues[idx].first, &key);
-        iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, key,
-                                                     rv);
+        iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, key);
         break;
       case IterableIteratorBase::IteratorType::Values:
         Unused << ToJSValue(cx, mValues[idx].second, &value);
-        iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, value,
-                                                     rv);
+        iterator_utils::ResolvePromiseWithKeyOrValue(cx, data->mPromise, value);
         break;
       case IterableIteratorBase::IteratorType::Entries:
         Unused << ToJSValue(cx, mValues[idx].first, &key);
         Unused << ToJSValue(cx, mValues[idx].second, &value);
         iterator_utils::ResolvePromiseWithKeyAndValue(cx, data->mPromise, key,
-                                                      value, rv);
+                                                      value);
         break;
     }
 
diff --git a/dom/bindings/test/TestInterfaceAsyncIterableSingle.cpp b/dom/bindings/test/TestInterfaceAsyncIterableSingle.cpp
index 2baa9286da4465b2c39dfe271814e5e37b6cf187..ad9ffbe9190f7c21821c7e67461cea8e4fe946b7 100644
--- a/dom/bindings/test/TestInterfaceAsyncIterableSingle.cpp
+++ b/dom/bindings/test/TestInterfaceAsyncIterableSingle.cpp
@@ -98,18 +98,19 @@ void TestInterfaceAsyncIterableSingle::ResolvePromise(
     IterableIteratorBase* aIterator, IteratorData* aData) {
   AutoJSAPI jsapi;
   if (NS_WARN_IF(!jsapi.Init(mParent))) {
+    aData->mPromise->MaybeRejectWithInvalidStateError(
+        "Couldn't get the global.");
     return;
   }
   JSContext* cx = jsapi.cx();
-  ErrorResult rv;
+
   if (aData->mIndex >= 10) {
-    iterator_utils::ResolvePromiseForFinished(cx, aData->mPromise, rv);
+    iterator_utils::ResolvePromiseForFinished(cx, aData->mPromise);
   } else {
     JS::Rooted<JS::Value> value(cx);
     Unused << ToJSValue(
         cx, (int32_t)(aData->mIndex * 9 % 7 * aData->mMultiplier), &value);
-    iterator_utils::ResolvePromiseWithKeyOrValue(cx, aData->mPromise, value,
-                                                 rv);
+    iterator_utils::ResolvePromiseWithKeyOrValue(cx, aData->mPromise, value);
 
     aData->mIndex++;
   }
diff --git a/dom/fs/child/FileSystemDirectoryIteratorFactory.cpp b/dom/fs/child/FileSystemDirectoryIteratorFactory.cpp
index 573b47c3f836aba8e0454eff077b1cf6167ca91b..29fab55d49a2d8d2fe838e2daa3761721ada509e 100644
--- a/dom/fs/child/FileSystemDirectoryIteratorFactory.cpp
+++ b/dom/fs/child/FileSystemDirectoryIteratorFactory.cpp
@@ -50,8 +50,7 @@ struct ValueResolver<IterableIteratorBase::Keys> {
       return NS_ERROR_INVALID_ARG;
     }
 
-    iterator_utils::ResolvePromiseWithKeyOrValue(cx, aPromise.get(), key,
-                                                 aError);
+    iterator_utils::ResolvePromiseWithKeyOrValue(cx, aPromise.get(), key);
 
     return NS_OK;
   }
@@ -81,8 +80,7 @@ struct ValueResolver<IterableIteratorBase::Values> {
       return NS_ERROR_INVALID_ARG;
     }
 
-    iterator_utils::ResolvePromiseWithKeyOrValue(cx, aPromise.get(), value,
-                                                 aError);
+    iterator_utils::ResolvePromiseWithKeyOrValue(cx, aPromise.get(), value);
 
     return NS_OK;
   }
@@ -118,7 +116,7 @@ struct ValueResolver<IterableIteratorBase::Entries> {
     }
 
     iterator_utils::ResolvePromiseWithKeyAndValue(cx, aPromise.get(), key,
-                                                  value, aError);
+                                                  value);
 
     return NS_OK;
   }
@@ -159,7 +157,7 @@ class DoubleBufferQueueImpl
     MOZ_ASSERT(aCx);
 
     if (!aValue) {
-      iterator_utils::ResolvePromiseForFinished(aCx, aPromise.get(), aError);
+      iterator_utils::ResolvePromiseForFinished(aCx, aPromise.get());
       return;
     }