как обратиться в объекту из ответа после завершения fetch и промисов?
let request = fetch(myurl, {
method: 'post',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: encodeBody(sendData)
})
.then((httpResponse) => {
if (httpResponse.ok) {
return httpResponse.json(); // .json() is a promise
}
return "Response not ok"
})
.then(json => {
console.log(json)
return json
})
.catch(err => { return "Fetch did not succeed" })
console.log(request); // и тут пусто
внутри .then работай с результатом
это я понял. Но мне надо из ответа вытащить ссылку и отправить ее на фронт
так, только внутри then же можно работать. А зам фетч находится в другой функции. и как раз не пойму, как выкинуть на самый верх значение
юзать async/await
ты можешь вернуть из своей функции этот промис и уже во внешней функции написать .then
Тогда вам нужно сделать так, чтобы эта функция тоже возвращала промис(fetch в вашем случае). И уже другой код дожидался ее результата.
``` export function paybtn_click(event, $w) { getPaymentLink(payment) .then(response => { if(response.result) { console.log('getPaymentLink OK'); } else { //location to NOT page console.log('getPaymentLink OK'); } }) ; } а на беке export async function getPaymentLink(paymentData) { let request = fetch(myUrl, { method: 'post', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: encodeBody(sendData) }) .then((httpResponse) => { if (httpResponse.ok) { return httpResponse.json(); } return "Response not ok" }) .then(json => { // Here we consume the .json() promise. console.log(json) return json }) .catch(err => { return "Fetch did not succeed" }) console.log(request); } ```
Ну у вас даже уже функция асинхнонная. Поставьте await перед fetch и все
и что мне это даст?
await буквально значит "подождать" В request будет записан уже результат промиса, а не сам промис. Еще желательно избавиться от then, раз уж вы используете async/await
Обсуждают сегодня