```typescript= //Написать реализацию функции get которая будет возвращать результат как в примерах function get(path, obj, defaultValue) { let key = path.split('.')[0]; const tempObj = obj[key]; return get([].join("."),tempObj) //let newArr = {}; // arr.forEach((i)=>{ // if(obj[i] !== undefined){ // return newArr.push(obj[i]) // }else if(defaultValue){ // return newArr.push(defaultValue) // } // }) //['store', 'user', 'id'] //['id', 'user'], 'store'].pop() = store /* * store -> tempObj * user -> tempObj=undefined; * id -> 1 */ return newArr[0] } const obj = { store: { field:1, user: { id: 1 } } }; //Примеры get("store.user.id", obj) // выведет 1 get("store.user1.id", obj, 10) // выведет 10, дефолтное значение //--------------------------------------------------------------------------------------------------------------- // Написать функцию delay function delay(ms:number) { } async function doIt(){ await delay(1000); notify.success("All good!"); } //--------------------------------------------------------------------------------------------------------------- // Написать хук // Проблема есть функция getNotifications, которая возвращает список нотификаций, // тебе нужно сделать хук, который позволит получать нотификации async function getNotifications():Promise<Notification[]> { const {data} = await axios.get("/api/notifications"); return data; } function useNotifications() { } //используется так const { items, loading, error } = useNotifications(); //items - массив нотификаций //loading - флаг что идет загрузка //1) Можно ли добавить сюда функцию refresh? для запуска обновления? //2) Как можно было бы организовать кеширование данных? //--------------------------------------------------------------------------------------------------------------- // Какие проблемы видишь? const Component = () => { const [state, setState] = useState(); const [count, setCount] = useState(); const handleSearch = async (e) => { const data = await api.search(e.target.value); const count = await api.getCount(e.target.value); setState(data); setCount(count); } return ( <> <input type="text" onChange={handleSearch} /> //Render search result {state} {count} </> ) } } //--------------------------------------------------------------------------------------------------------------- Задача Иванов 00:11:22 Петров 01:22:22 ..... Сидоров 02:32:34 // в 2 потока // не должен делать больше 2 активных соед. // обработка за миним время // ilshat.gaifullin@etnatrader.com function proccessUrl(arr:string[]){ } const result = await proccessUrl(["/api/1", "/api/2"...]); ```