mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-17 22:32:51 +00:00
Bug 1619947 - Make MozPromise::All work correctly with const r=bwc
Depends on D97854 Differential Revision: https://phabricator.services.mozilla.com/D102824
This commit is contained in:
parent
b73057479f
commit
25bf0bbc2a
@ -304,13 +304,15 @@ class MozPromise : public MozPromiseBase {
|
||||
mResolveValues.SetLength(aDependentPromises);
|
||||
}
|
||||
|
||||
void Resolve(size_t aIndex, ResolveValueType&& aResolveValue) {
|
||||
template <typename ResolveValueType_>
|
||||
void Resolve(size_t aIndex, ResolveValueType_&& aResolveValue) {
|
||||
if (!mPromise) {
|
||||
// Already rejected.
|
||||
return;
|
||||
}
|
||||
|
||||
mResolveValues[aIndex].emplace(std::move(aResolveValue));
|
||||
mResolveValues[aIndex].emplace(
|
||||
std::forward<ResolveValueType_>(aResolveValue));
|
||||
if (--mOutstandingPromises == 0) {
|
||||
nsTArray<ResolveValueType> resolveValues;
|
||||
resolveValues.SetCapacity(mResolveValues.Length());
|
||||
@ -324,13 +326,14 @@ class MozPromise : public MozPromiseBase {
|
||||
}
|
||||
}
|
||||
|
||||
void Reject(RejectValueType&& aRejectValue) {
|
||||
template <typename RejectValueType_>
|
||||
void Reject(RejectValueType_&& aRejectValue) {
|
||||
if (!mPromise) {
|
||||
// Already rejected.
|
||||
return;
|
||||
}
|
||||
|
||||
mPromise->Reject(std::move(aRejectValue), __func__);
|
||||
mPromise->Reject(std::forward<RejectValueType_>(aRejectValue), __func__);
|
||||
mPromise = nullptr;
|
||||
mResolveValues.Clear();
|
||||
}
|
||||
@ -350,6 +353,14 @@ class MozPromise : public MozPromiseBase {
|
||||
const ResolveOrRejectValue&>
|
||||
ResolveOrRejectValueParam;
|
||||
|
||||
typedef std::conditional_t<IsExclusive, ResolveValueType&&,
|
||||
const ResolveValueType&>
|
||||
ResolveValueTypeParam;
|
||||
|
||||
typedef std::conditional_t<IsExclusive, RejectValueType&&,
|
||||
const RejectValueType&>
|
||||
RejectValueTypeParam;
|
||||
|
||||
class AllSettledPromiseHolder : public MozPromiseRefcountable {
|
||||
public:
|
||||
explicit AllSettledPromiseHolder(size_t aDependentPromises)
|
||||
@ -401,11 +412,11 @@ class MozPromise : public MozPromiseBase {
|
||||
for (size_t i = 0; i < aPromises.Length(); ++i) {
|
||||
aPromises[i]->Then(
|
||||
aProcessingTarget, __func__,
|
||||
[holder, i](ResolveValueType aResolveValue) -> void {
|
||||
holder->Resolve(i, std::move(aResolveValue));
|
||||
[holder, i](ResolveValueTypeParam aResolveValue) -> void {
|
||||
holder->Resolve(i, MaybeMove(aResolveValue));
|
||||
},
|
||||
[holder](RejectValueType aRejectValue) -> void {
|
||||
holder->Reject(std::move(aRejectValue));
|
||||
[holder](RejectValueTypeParam aRejectValue) -> void {
|
||||
holder->Reject(MaybeMove(aRejectValue));
|
||||
});
|
||||
}
|
||||
return promise;
|
||||
|
Loading…
x
Reference in New Issue
Block a user