Kokujou
Lieutenant
- Registriert
- Dez. 2017
- Beiträge
- 948
Heyho. Das ist der Stand:
Ich habe ein C# Backend von dem ich ein IAsyncEnumerable zurückgebe. Das funktioniert auch, ich habe es gedebugged und die yield return statements werden ausgelöst.
Code:
jetzt versuche ich den Code in JavaScript zu lesen und das interessante ist: Er liest nur das erste Item und wartet dann auf den gesamten Rest der Response. Keine Exception, kein weiterer Iterationsschritt, absolut gar nichts beim debuggen:
für andere scheint's zu funktionieren weil ich diese und andere Lösungen schon oft gefunden habe.
Vorher hatte ich auch etwas mit while(true) und body.getReader().read() ausprobiert, was noch weniger funktioniert hat und gleich die ganze Response gelesen hat. irgendwas stimmt da also nicht, irgendwas scheine ich zu vergessen, aber was?
kann mir jemand einen Tipp geben?
Ich habe ein C# Backend von dem ich ein IAsyncEnumerable zurückgebe. Das funktioniert auch, ich habe es gedebugged und die yield return statements werden ausgelöst.
Code:
C#:
[HttpPost("import")]
public async IAsyncEnumerable<MediaModel> ImportRootFolderAsync([FromBody] string rootFolderPath)
{
await foreach (var media in _mediaImportService.ImportRootFolderAsync(rootFolderPath)) yield return media;
}
jetzt versuche ich den Code in JavaScript zu lesen und das interessante ist: Er liest nur das erste Item und wartet dann auf den gesamten Rest der Response. Keine Exception, kein weiterer Iterationsschritt, absolut gar nichts beim debuggen:
Javascript:
var decoder = new TextDecoder('utf-8');
for await (const item of /** @type {any} */ (response.body)) {
var text = decoder.decode(item);
if (text.startsWith('[')) text = text.substring(1);
var result = JSON.parse(text);
yield result;
}
für andere scheint's zu funktionieren weil ich diese und andere Lösungen schon oft gefunden habe.
Vorher hatte ich auch etwas mit while(true) und body.getReader().read() ausprobiert, was noch weniger funktioniert hat und gleich die ganze Response gelesen hat. irgendwas stimmt da also nicht, irgendwas scheine ich zu vergessen, aber was?
kann mir jemand einen Tipp geben?