Задать вопрос
@hoax007

Как Вернуть промис без прописывания .then каждый раз?

Хочу сделать функцию, которая бы обрабатывала промис и получала результат, с которым тут же можно работать без прописывания дополнительных функций .then.

(1)
Т.е. я могу обработать промис таким планом
promis.then((value)=> {
div.innerHTML = value[0]; // типо json-объект. 
});


НО, как сделать так, чтобы получилось ->

function f() {
 promis.then((value)=> {
 return value; // типо json-объект
 });
}
let obj = f();
div.innerHTML = obj[0];


(2)
И второй вопрос - Почему при данном примере не требует .then на моменте передачи значения промиса аргументом функции?
Т.е.

async function loadData(url) { 

	let f = await fetch(url);
	
	
	if (!f.ok) {
		alert('получить файл не удалось');
	} else {
	
		let json = await f.json(); 
	
	
	transferValue(json);  // передаем value
		}
	
	}

function transferValue(data) {

div.innerHTML = data[0]; // никаких .then

}
  • Вопрос задан
  • 128 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ну во-первых, твой await x.json() при await - это тот-же then.

И тебе правильно сказали, что без await и без костылей - ты eventLoop не обыграешь.

Можно выбрасывать при await и потом ловить то, чем оказывается промис в итоге, можно юзать Promise.withResolvers, что в принципе тоже без await нереально.

Например (с withResolvers):

const { promise, resolve, reject } = Promise.withResolvers()

const getProducts = () => fetch('https://fakestoreapi.com/products')

try {
    resolve(
        (await getProducts()).json()
    )
} catch (e) {
    reject(e)
}

console.log(
    await promise
)


Но тебе выше уже сказали, что такие операции без минимум использования оператора await - нереально исполнить. Не хочешь then - будешь юзать await, не хочешь await - будешь юзать then. Либо создавай своё подобие промисов на костылях, через кастомные события или сигналы.

P.S.: Чтобы понять, почему нельзя сделать то, что хочешь ты - прочитай то что тебе выше написали, а перед/после прочитай это.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы