Skip to content

Commit 513b38c

Browse files
committed
fix(incrementalDelivery): remove extra then from AsyncRecord completion
extracted from #3786
1 parent 6b5c8af commit 513b38c

File tree

2 files changed

+23
-28
lines changed

2 files changed

+23
-28
lines changed

src/execution/__tests__/stream-test.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -483,11 +483,6 @@ describe('Execute: stream directive', () => {
483483
},
484484
],
485485
},
486-
],
487-
hasNext: true,
488-
},
489-
{
490-
incremental: [
491486
{
492487
items: [{ name: 'Leia', id: '3' }],
493488
path: ['friendList', 2],

src/execution/execute.ts

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,16 +1846,21 @@ function executeDeferredFragment(
18461846
fields,
18471847
asyncPayloadRecord,
18481848
);
1849-
1850-
if (isPromise(promiseOrData)) {
1851-
promiseOrData = promiseOrData.then(null, (e) => {
1852-
asyncPayloadRecord.errors.push(e);
1853-
return null;
1854-
});
1855-
}
18561849
} catch (e) {
18571850
asyncPayloadRecord.errors.push(e);
1858-
promiseOrData = null;
1851+
asyncPayloadRecord.addData(null);
1852+
return;
1853+
}
1854+
1855+
if (isPromise(promiseOrData)) {
1856+
promiseOrData.then(
1857+
(value) => asyncPayloadRecord.addData(value),
1858+
(error) => {
1859+
asyncPayloadRecord.errors.push(error);
1860+
asyncPayloadRecord.addData(null);
1861+
},
1862+
);
1863+
return;
18591864
}
18601865
asyncPayloadRecord.addData(promiseOrData);
18611866
}
@@ -1938,21 +1943,19 @@ function executeStreamField(
19381943
return asyncPayloadRecord;
19391944
}
19401945

1941-
let completedItems: PromiseOrValue<Array<unknown> | null>;
19421946
if (isPromise(completedItem)) {
1943-
completedItems = completedItem.then(
1944-
(value) => [value],
1947+
completedItem.then(
1948+
(resolvedItem) => asyncPayloadRecord.addItems([resolvedItem]),
19451949
(error) => {
19461950
asyncPayloadRecord.errors.push(error);
19471951
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
1948-
return null;
1952+
asyncPayloadRecord.addItems(null);
19491953
},
19501954
);
19511955
} else {
1952-
completedItems = [completedItem];
1956+
asyncPayloadRecord.addItems([completedItem]);
19531957
}
19541958

1955-
asyncPayloadRecord.addItems(completedItems);
19561959
return asyncPayloadRecord;
19571960
}
19581961

@@ -2063,22 +2066,19 @@ async function executeStreamIterator(
20632066

20642067
const { done, value: completedItem } = iteration;
20652068

2066-
let completedItems: PromiseOrValue<Array<unknown> | null>;
20672069
if (isPromise(completedItem)) {
2068-
completedItems = completedItem.then(
2069-
(value) => [value],
2070+
completedItem.then(
2071+
(resolvedItem) => asyncPayloadRecord.addItems([resolvedItem]),
20702072
(error) => {
20712073
asyncPayloadRecord.errors.push(error);
20722074
filterSubsequentPayloads(exeContext, path, asyncPayloadRecord);
2073-
return null;
2075+
asyncPayloadRecord.addItems(null);
20742076
},
20752077
);
20762078
} else {
2077-
completedItems = [completedItem];
2079+
asyncPayloadRecord.addItems([completedItem]);
20782080
}
20792081

2080-
asyncPayloadRecord.addItems(completedItems);
2081-
20822082
if (done) {
20832083
break;
20842084
}
@@ -2257,7 +2257,7 @@ class DeferredFragmentRecord {
22572257
});
22582258
}
22592259

2260-
addData(data: PromiseOrValue<ObjMap<unknown> | null>) {
2260+
addData(data: ObjMap<unknown> | null) {
22612261
const parentData = this.parentContext?.promise;
22622262
if (parentData) {
22632263
this._resolve?.(parentData.then(() => data));
@@ -2308,7 +2308,7 @@ class StreamRecord {
23082308
});
23092309
}
23102310

2311-
addItems(items: PromiseOrValue<Array<unknown> | null>) {
2311+
addItems(items: Array<unknown> | null) {
23122312
const parentData = this.parentContext?.promise;
23132313
if (parentData) {
23142314
this._resolve?.(parentData.then(() => items));

0 commit comments

Comments
 (0)