Нужно вытянуть из Промиса значение в переменную
Используя только синтаксис Promise
let pr = new Promise((resolve, reject)=>{
let random = 1
setTimeout(()=>{
if (random>0) { resolve('plus') }
else { reject('minus') }
}, 1000)
})
Если записываю в новую переменную так, то туда ожидаемо попадает Промис
let result = pr.then(res=>res).catch(err=>err)
console.log(result) //Promise {<fulfilled>: 'plus'}
Подскажите пожалуйста, тогда единственный вариант - это присвоение значения внутри then, catch, как показано ниже ?
Или есть еще вариант как присвоид значение, а не сам Промис, переменной используя синтаксис then, catch?
let result;
let error;
pr.then(res=>result=res).catch(err=>error=err)
//1 second later
console.log(result) //plus - можно как-то использовать дальше
Используя async, await (хз как это переписать на setTImeout, поэтому пример с урлом), присвоить данные из Промиса можно только используя промежуточную асинхронную функцию и ее вызов ?
async function check() {
let res = await fetch('https://jsonplaceholder.typicode.com/todos/1')
return await res.json()
}
let result
async function give() { result = await check() }
give();
console.log(result) //{userId: 1, id: 1, title: 'delectus aut autem', completed: false}
Или аналог в виде самовызывающейся асинхронки ?
(async ()=> result=await check())()
console.log(result) //{userId: 1, id: 1, title: 'delectus aut autem', completed: false}
console.log(result.id) //1 - можно как-то использовать дальше
Так же вопрос, если попытатся вывести результат сразу, то ничего не выйдет, так как он еще не получен. Как тогда быть в таком случает ?
let pr = new Promise((resolve, reject)=>{
let random = 1 setTimeout(()=>{
if (random>0) { resolve('plus') }
else { reject('minus') } }, 1000) })
let result = pr.then(res=>res).catch(err=>err)
console.log(result) //undefined - Промис еще не вернул результат
Как результат использовать дальше ?
Promise { <state>: "pending" }как и должно быть, никаких undefined там нет – andreymal Aug 10 '23 at 15:00console.log(2+2)и вы тоже увидите undefined, промисы здесь вообще ни при чём – andreymal Aug 10 '23 at 15:05let pr = new Promise((resolve, reject)=>{ let random = 1; setTimeout(()=>{ if (random>0){ resolve('plus')} else { reject('minus')} }, 1000) }); let result; let error; pr.then(res=>result=res).catch(err=>error=err); console.log('2+2', result)
2+2 undefined В обоих случаях возвращает undefined
– Mr.StupidQuestions Aug 10 '23 at 15:23console.log('result out', result)вне async функции остаётся загадкой... – Алексей Шиманский Sep 06 '23 at 20:20