Получить значение из Промиса (да дубликат, сорри)

Рейтинг: 0Ответов: 0Опубликовано: 10.08.2023

Нужно вытянуть из Промиса значение в переменную
Используя только синтаксис 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 - Промис еще не вернул результат

Как результат использовать дальше ?

Ответы

Ответов пока нет.