половинки - через if - синхронную и асинхронную
если true - выполняется синхр код и возвращает массив
если false - выполняется асинк код (асинк IIFE) и возвращает полученный массив
но общего return у функции больше нет
в общем, как обычно - ловлю undefined при вызове этой функции
где я ошибся?
код выложил : https://codepen.io/dimanvaz/pen/NWadoja
———-
блин, как сделать, чтобы функция возвращала объект в любом из случаев
то есть если условие соблюлось - срабатывает return в синхронной половине
если нет - срабатывает в асинхронной
Не показывайте этот код детям...)
не там я ретюрню, чувствую
return во внетренней функции на внешнюю никак не влияет Сделайте selectItem нормальной асинхронной функцией
пожалуй. Но уже завтра:) спасибо
у массивов есть много методов кроме forEach, например find
getMatch(isCollection) { return new Promise(async (resolve, reject) => { if(isCollection ){ return resolve(this.items.find(item => item.id === parseInt(this.$route.params.xxx))); } const idParam = +window.location?.hash?.slice(7) || 0; const respObject = await getAPIdata().then(response => response.json()).catch(reject); resolve(respObject.items.find(item => item.id === +idParam)); }); }, async selectItem(){ const match = await getMatch(this.items.length > 0); // ну и дальше что хотите делайте с match }
В чем смысл делать new Promise, почему не использовать async и для getMatch?
На быструю руку, минимальный рефакторинг
надо, чтобы страница отрисовывалась как при переходе на неё с главной, так и при вставлении в урл прямой ссылки на товар.
Если задал такой вопрос, то поменяй источник. Год большое время.
потом стало понятно, что дело в роутах и парамс. При переходе они есть, при прямой ссылке - нет. Дальше стал делать костыль, чтобы при попадании на страницу по прямой ссылке происходил фетч и из пришедших итемс по строке в урле находился нужный Итем. Для этого прежнюю функцию selectItem() придётся делать "с двойным дном" - одна половина работает, если Итемс есть (то есть перешли с главной). Вторая половина работает, если итемс пустые (то есть юзер идёт по прямой ссылке) - делает фетч, перебирает полученные Итемс на сооветствие куску урла.
год не предела
Еще раз: пользователь заходит на урл вида /goods?goodId=12151 и вам надо сделать запрос по этому goodId на сервер?
да
Я ничего не знаю о vue-router, но почти уверен, что там есть возможность посмотреть что лежит в параметрах урла и сделать по ним запрос, в чем именно у вас сложность?
а почему бы не сделать, чтоб она всегда возвращала промис, наоборот)
потому что всё, что возвращает промис, у меня потом заразит остальной код и он тоже начнёт возвращать пендинги и промисы вместо значений
В чем проблема вызвать асинхронную фукнцию в created и то, что она с сервера получит записать в состояние, к примеру?
Обсуждают сегодня