ttutiki

Пользователь

Регистрация: 28.09.2013

Сообщения: 1898

Рейтинг: 645

ttutiki

Регистрация: 28.09.2013

Сообщения: 1898

Рейтинг: 645

Можно ли вынести анонимную функцию из коллбека в отдельный метод? Если да то как туда передать параметры? Может кто-то еще укажет на то что код говно и почему? Я ваще уже не могу PepeBadFeel.png?1598553375



Запрос возвращает только часть инфы. Понять нужен ли еще один запрос можно только получив предыдущий. Я не придумал другого способа получить всю инфу, и только потом начать с ней работать Sadg.png?1610616138




UPD: Спасибо всем большое за ответы, за код ревью, и за то что обратили внимание на async/await. Такая имба, то что нужно Тему можно клоз

dmitry450

Пользователь

Регистрация: 07.10.2013

Сообщения: 504

Рейтинг: 239

dmitry450

Регистрация: 07.10.2013

Сообщения: 504

Рейтинг: 239


asyncfunctionGetComments(requestData,searchLimit,commentsData)

{

//Get'commentThread'listanddealwithitsdata.

constdata=awaitgapi.client.youtube.commentThreads.list(requestData)

callback(data,searchLimit,commentsData)

}

iJustS

Пользователь

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 1000

iJustS

Регистрация: 23.02.2021

Сообщения: 456

Рейтинг: 100

Нарушения: 1000

ты учишь +- продвинутую тему языка и пишешь function в 2021?justsmile.png?1553740538


как минимум я бы заменил твой код так:


https://pastebin.com/meaY34cU


Я не гуру JS, но:


1. Хоть ты и учишься, но привыкай не тулить комменты к каждой строке кода, которые только мешают читать его.


Во-первых ты даешь возможность прочитать что делает твой код без твоих комментов(если нормально пишешь код, то другой программист обычно это сможет ), а тот кто не понимает что-то - может прочитать комментарий сверху. А во-вторых твоя функция становится компактней и проще.


2. Ну и как бы посмотри сколько я строк скоратил тебе с твоими переносами для скобок и тд, плюс убрал function.


3. Теперь этот код проще рефакторить, дерзай(бтв я не понял что ты хочешь сделать)



silllen

Пользователь

Регистрация: 24.09.2013

Сообщения: 312

Рейтинг: 173

silllen

Регистрация: 24.09.2013

Сообщения: 312

Рейтинг: 173

ttutiki сказал(а):


Можно ли вынести анонимную функцию из коллбека в отдельный метод? Если да то как туда передать параметры? Может кто-то еще укажет на то что код говно и почему? Я ваще уже не могу PepeBadFeel.png?1598553375



Запрос возвращает только часть инфы. Понять нужен ли еще один запрос можно только получив предыдущий. Я не придумал другого способа получить всю инфу, и только потом начать с ней работать Sadg.png?1610616138


Нажмите, чтобы раскрыть...


Код говно, потому что:
функция getComments возвращает не комменты а какой-то SearchInList
у тебя идут провалы асинхронности, потому что ты нигде не возвращаешь сам промис, поэтому не можешь это чейнить, соответственно единственное место, где ты можешь получить результат это SearchInList и там законсольложить его/записать в базу
у тебя есть searchLimit, который судя по названию должен ограничить результаты, но возьмем пример: searchLimit:150, requestDataSearchLimit: 100, всего коментов: 1000. Итого твоей код заберет 200 коментов вместо ожидаемых 150
я бы не советовал делать что-либо через рекурсию, зачем ложить все эти функции в стек?(тут я могу ошибаться )

паста
вот как бы я это написал, но я делал это на слепую, поэтому не предсталвяю работает ли оно , ну и по хорошему там нужно обрабатывать еще логику retrievedComments.length, но мне лень

ну и если по какой-то причине ты не можешь юзать async/await, то погугли promise in sequence через reduce
а ну и не знаю, что ты там серчишь по коментам, но ютуб апи вроде позволяет искать по ключевым словам?

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7478

Рейтинг: 4604

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7478

Рейтинг: 4604

iJustS сказал(а):


ты учишь +- продвинутую тему языка и пишешь function в 2021?justsmile.png?1553740538


как минимум я бы заменил твой код так:


https://pastebin.com/meaY34cU


Я не гуру JS, но:


1. Хоть ты и учишься, но привыкай не тулить комменты к каждой строке кода, которые только мешают читать его.


Во-первых ты даешь возможность прочитать что делает твой код без твоих комментов(если нормально пишешь код, то другой программист обычно это сможет ), а тот кто не понимает что-то - может прочитать комментарий сверху. А во-вторых твоя функция становится компактней и проще.


2. Ну и как бы посмотри сколько я строк скоратил тебе с твоими переносами для скобок и тд, плюс убрал function.


3. Теперь этот код проще рефакторить, дерзай(бтв я не понял что ты хочешь сделать)




Нажмите, чтобы раскрыть...


ты через


const getComments = (...) => {...}


присваиваешь переменной getComments анонимную функцию и при таком коде




x()
const x = () => {return 2*x}




тебе интерпретатор выкидывает ошибку


ReferenceError: Cannot access 'x' before initialization




когда ты пишешь


function getComments(...) {...} ты создаешь именованную функцию с которой в этом коде нет ошибок




x()
function x() {return 2*x}




это не так важно (особенно учитывая то, что в реальном проекте ты энивей все эти функции в объект положишь для структуризации кода) но все же.


ещё их проще дебажить, ибо при ошибке в коде будет писаться что-то вроде in function getComments, когда как при анонимной нет




находил норм темку на sof по этому вопросу, но что-то не могу найти.




Бтв, не советую юзать then, ибо если у чела там будет что-то типа


.then


.then


.then


..


а такое вполне часто может быть, читать такой код тяжело, лучше юзать async/await как чел в 1 посте написал

ttutiki

Пользователь

Регистрация: 28.09.2013

Сообщения: 1898

Рейтинг: 645

ttutiki

Регистрация: 28.09.2013

Сообщения: 1898

Рейтинг: 645

Ritsuko сказал(а):


Бтв, не советую юзать then, ибо если у чела там будет что-то типа


.then


.then


.then


..


а такое вполне часто может быть, читать такой код тяжело, лучше юзать async/await как чел в 1 посте написал


Нажмите, чтобы раскрыть...


Да, судя по всему буду на асинк переходить. Я просто жс вообще не знаю, пишу на нем потому что ситуация требует. По многопоточности тоже знания поверхностные, только начинаю разбираться.

Ritsuko

Пользователь

Регистрация: 17.12.2017

Сообщения: 7478

Рейтинг: 4604

Ritsuko

Регистрация: 17.12.2017

Сообщения: 7478

Рейтинг: 4604

ttutiki сказал(а):


Да, судя по всему буду на асинк переходить. Я просто жс вообще не знаю, пишу на нем потому что ситуация требует. По многопоточности тоже знания поверхностные, только начинаю разбираться.


Нажмите, чтобы раскрыть...


в js нет многопоточности (в браузерном, в node.js есть), да и в асинхронности там нет в чем и разбираться то особо, это не с++

ttutiki

Пользователь

Регистрация: 28.09.2013

Сообщения: 1898

Рейтинг: 645

ttutiki

Регистрация: 28.09.2013

Сообщения: 1898

Рейтинг: 645

silllen сказал(а):

у тебя есть searchLimit, который судя по названию должен ограничить результаты, но возьмем пример: searchLimit:150, requestDataSearchLimit: 100, всего коментов: 1000. Итого твоей код заберет 200 коментов вместо ожидаемых 150


Нажмите, чтобы раскрыть...


searchLimit всегда степень 10 начиная с 100


silllen сказал(а):


а ну и не знаю, что ты там серчишь по коментам, но ютуб апи вроде позволяет искать по ключевым словам?


Нажмите, чтобы раскрыть...


Ютуб дата апи не дает возможности искать в комментах, только видео, плейлисты и что-то еще, или я не понял что ты имеешь ввиду

Вообще спасибо за ответ

Nikoliasik_Zeus

Почетный пользователь

Регистрация: 22.05.2014

Сообщения: 17669

Рейтинг: 27282

Nikoliasik_Zeus

Регистрация: 22.05.2014

Сообщения: 17669

Рейтинг: 27282

ttutiki сказал(а):


Можно ли вынести анонимную функцию из коллбека в отдельный метод? Если да то как туда передать параметры? Может кто-то еще укажет на то что код говно и почему? Я ваще уже не могу PepeBadFeel.png?1598553375



Запрос возвращает только часть инфы. Понять нужен ли еще один запрос можно только получив предыдущий. Я не придумал другого способа получить всю инфу, и только потом начать с ней работать Sadg.png?1610616138




UPD: Спасибо всем большое за ответы, за код ревью, и за то что обратили внимание на async/await. Такая имба, то что нужно PepeOK.png?1592047625 Тему можно клоз


Нажмите, чтобы раскрыть...


можно

Тема закрыта