Пытаясь понять возвращаемый результат, я пришел к такой простой вещи:
fetch('http://localhost:8081/position', {mode: 'cors'})
.then(response => {return response.json()})
.then(result => console.info(result));
который работает - он печатает json ответа.
Но это не работает:
fetch('http://localhost:8081/position', {mode: 'cors'})
.then(response => {console.info(response.json()); return response.json();})
.then(result => console.info(result));
Это показывает Uncaught (in promise) TypeError: Failed to execute 'json' on 'Response': body stream is locked
Это почему?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


На самом деле обещание не нарушается, но проблема в том, что .json() (и .body(), .text()) можно вызвать только один раз.
HTTP-запрос моделируется как поток, и вы не можете прочитать из потока дважды.
Однако вы можете поместить результат обещания .json() в переменную и вместо этого вернуть его.
fetch('http://localhost:8081/position', {mode: 'cors'})
.then(response => response.json())
.then(jsonBody => { console.info(jsonBody); return jsonBody; })
.then(result => console.info(result));
Lightglobe :) Обнадеживает, что .then(response => {let r = response.json(); console.info(r); return(r)}) делает то, что я ожидал. Спасибо!
@GreenAsJade тонкое предложение. const всегда лучше, чем let, если вам не нужен let.
Спасибо за совет! Я просто ввел туда несколько символов, чтобы отладочная компиляция скомпилировалась, может, мне стоит выработать привычку всегда конструировать!
Да, в основном я использую const по умолчанию, пока не сделаю что-нибудь, что заставит (в моем случае) машинописный текст жаловаться;)
Дело не в регистрации, а в вызове
.json()