```typescript=
//Написать реализацию функции get которая будет возвращать результат как в примерах
function get(path: string, obj: Record<string, any>, default?: any){
const slitPath = path.split('.')
let targetObject = obj
slitPath.forEach((pathItem) => {
if (targetObject) targetObject = targetObject[pathItem]
})
return targetObject === null ? null : targetObject || default
}
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){
return new Promise((resolve) => {
setTimeout(() => {
resolve()
}, ms)
})
}
async function doIt(){
await delay(1000);
notify.success("All good!");
}
//---------------------------------------------------------------------------------------------------------------
// Написать хук
// Проблема есть функция getNotifications, которая возвращает список нотификаций,
// тебе нужно сделать хук, который позволит получать нотификации
async function getNotifications(){
const {data} = await axios.get("/api/notifications");
return data;
}
function useNotifications({ms}){
const [loading, setLoading] = useState(false)
const [error, setError] = useState(null)
const [items, setItems] = useState(null)
const [criteria, setCriteria] = useState(false)
useEffect(() => {
const timeoutId = setTimeout(() => {
(async function () {
setCriteria(prev => !prev)
try {
setLoading(true)
const items = await getNotifications()
setItems(items)
} catch (e) {
setError(e)
}
})()
}, ms);
return () => {
clearTimeout(timeoutId)
}
}, [criteria])
useEffect(() => {
if (items || error) setLoading(false)
}, [items, error])
// useEffect(()=>{
// return Promise
// }, [...deps]);
// const f = async ()=> {
// }
// f->Promise
return {
items,
loading,
error
}
}
//используется так
const { items, loading, error } = useNotifications({ms: 5000});
//items - массив нотификаций
//loading - флаг что идет загрузка
//1) Можно ли добавить сюда функцию refresh? для запуска обновления?
//2) Как можно было бы организовать кеширование данных?
//---------------------------------------------------------------------------------------------------------------
// Какие проблемы видишь?
function debounce(fn, ms){
let timeout = null
return function() {
if (timeout) {
clearTimeout(timeout)
}
timeout = setTimeout(() => {
fn()
}, ms)
}
}
}
function search(){
}
const dbSearch = debounce(search, 400);
dbSearch()
await delay(100);
dbSearch()
const Component =(..)=> {
const [state, setState] = useState();
const [count, setCount] = useState();
const search = async () => {
const [data, count] = await Promise.all([api.search(e.target.value), api.getCount(e.target.value)])
// const data = await api.search(e.target.value); //5с
// const count = await api.getCount(e.target.value); //5с
setState(data);
setCount(count);
}
const dbSearch = debounce(search, 400);
// const handleSearch = async (e) => {
// dbSearch()
// };
return <>
<input type="text" onChange={dbSearch} />
//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"...]);
```