@צדיק-תמים רבים חיפשו ורבים יחפשו, מאד מורכב טכנית לעשות כזה דבר
יוסף בן שמעון
-
אתר להורדה מיוטיוב דרך API (שעובד בנטפרי) -
עזרה עם בניית תוסף כרום@צדיק-תמים עם האובייקט
chrome.extension.sendMessage
ומאזינים להודעות עם אובייקט
chrome.extension.onMessage.addListener
חפש בגוגל chrome extension send message between popup and page
-
עזרה עם בניית תוסף כרום@צדיק-תמים לא הבנתי את שאלתך
-
עזרה עם בניית תוסף כרום@ivrtikshoret
לתוספי כרום יש שני חלקים, יש דף רקע שזה הפופאפ, ויש קוד שמוזרק לתוך הדף, הקוד שמוזרק לדף יכול להיות מוזרק רק בטעינת הדף ולא מאוחר יותר, והקוד שבפופאפ לא יכול להשפיע ישירות על הדף, אבל אפשר לשלוח הודעות מהפופאפ לדף ומהדף לפופאפ
אז אתה צריך לעשות שני דברים - קודם כל להזריק קוד לדף שיאזין להודעות מהפופאפ, וכשיקבל הודעה שהמשתמש רוצה לצבוע את הדף בצבע מסוים אז הוא יבצע את זה. ודבר שני לבנות את הפופאפ עם אפשרות בחירת צבעים ושליחת הודעות לדף.
תתחיל ותודיע איפה נתקעת -
Sequelize מיון לפי נתוני טבלה אחרתיש לי טבלה של כרטיסים Tickets, וטבלה של לוגים Log
כל פעם שמשתמש פותח כרטיס, זה נרשם ללוג.
אני רוצה לחפש את הכרטיסים שלא פתחו אותם בכלל, או שפתחו הכי קצת, בשאילתה Mysql הייתי כותב כך:SELECT *, ( SELECT COUNT(*) FROM Log WHERE Log.TicketId = Tickets.ID ) AS openCount FROM Tickets ORDER BY openCount;
השאלה איך אני עושה את זה בSequelize, יש לי ענין מיוחד לעשות את זה דוקא שם בגלל תנאים מורכבים שכבר בנויים בו.
הכיוון שניסיתי הוא בערך כך:TicketsModel.findAll({ include: [ { model: Log, as: 'Log', attributes: [ [Sequelize.fn('COUNT'), 'openCount'] ] } ], order: ['openCount'] })
אבל זה כמובן לא תקין, לא מצאתי תיעוד איך אפשר לעשות תת שאילתה בתוך השאילתה הראשית.
האם זה אפשרי? -
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים אם אתה ממש מתעקש, אפשר לשפר את הפונקציה, כי היא עושה בעצם כמה דברים, וכלל נקוט בידינו שאין פונקציה אחת עושה שני שליחויות
אתה יכול להפריד את זה לפונקציה אחת שתהיה אחראית לבניה של ה URL, ופונקציה נוספת שתשלח את הבקשה לשרת. -
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים זה מעולה, זה בכלל לא טריק, אתה חייב להצהיר על המשתנה nextPageToken שיהיה זמין לכל הפונקציה בשביל האיטרציה הבאה של הלולאה
מה שכן, אתה לא חייב לאתחל אותו כמחרוזת ריקה, אלא להשאיר אותו מוצהר, התוצאה תהיה אותה תוצאה.
בקוד הישן שלך זה היה טריק כי רצית להשתמש עם האובייקט שמתקבל כתשובה מהשרת, שהוא מכיל את הטוקן של הדף הבא, אז עשית אוביקט דמה שמכיל רק את הטוקן, וזה לא תקין, אבל עכשיו עשית מתשנה מיוחד בשביל הטוקן וזה מצוין. -
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים לא הבנתי לאיזה טריקים התכוונת
(בשורה 15 כנראה התכוונת לif (nextPageToken)
-
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים ברור וקריא מאד
רק בקטנה, השם של המשתנה שבונה את ה URL לא אמור להיות GET_INFO_FOR_VIDEO_ID, כי זה לא פונקציה שמחזירה ערך, זה סה"כ URL חביב, צריך לקרוא לו כפשוטו url
ועוד משהו קטן, אין צורך לפצל את שורות 12 ו 13, זה יכול להיות פקודה אחת, כי אתה לא משתמש בפרומיס שמוחזר בשורה 12 אלא רק לצורך חילוץ הגייסון, אז זה יכול להיות כךconst infoVideo_Object = await fetch(GET_INFO_FOR_VIDEO_ID).then(res => res.json())
-
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים אמר בעזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS):
אשמח להרחבה
תראה לדוגמא את הקוד הזה
const url = new URL('https://www.googleapis.com/youtube/v3/search'); url.searchParams.append('channelId', channelId); if (nextPageToken) url.searchParams.append('pageToken', nextPageToken); console.log(url.toString());
שרשור מחרוזות זה לא דבר קל, ובפרט אם תרצה אחר כך לתחזק את זה (להוסיף תוכן למחרוזת, לשנות תנאים וכדומה) זה הופך להיות סיוט.
במקום זה אתה שולט על ה URL עם קוד טהור, מוסיף פרמטרים עם המתודה append, ובסוף אתה מדפיס את התוצאה עם toString@צדיק-תמים אמר בעזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS):
ובכלל הייתי שמח להעמיק קצת יותר בכל העניין של כתיבה נכונה של קוד
הבסיס הוא כפי שכתב שעייה, תחשוב איך אדם אחר יבין את הקוד שלך (או אתה עצמך עוד חצי שנה), הקוד אמור להסביר את עצמו, שכל מתכנת יבין מה התפקיד של המשתנה הזה ולמה אתה קורא עכשיו לפונקציה הזו ומה אתה מצפה ממנה להחזיר, לכן חשוב להקפיד על שמוות משתנים ברורים, לייחד לכל פונקציה שם ברור ומטרה ברורה, לא לחסוך בקוד על חשבון הקריאות, גם אם נדמה לך שזה יעיל יותר וקצר יותר.
לדוגמא מה זה הפונקציה בשם "לולאה", לא ברור מה המטרה שלה, צריך לקרוא לה שם שיבהיר שהיא מקבלת מידע על הערוץכדאי מאד גם להצמד לתקנים אוניברסליים, לדוגמא פונקציה שמחזירה ערך אמורה להתחיל ב get, כמו getToken ופונקציה שאמורה להגדיר ערך אמורה להתחיל ב set, מחלקה מתחילה באות גדולה, פונקציה מתחילה באות קטנה, כל הדברים האלה עוזרים להבנת הקוד
-
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים אמר בעזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS):
@יוסף-בן-שמעון אמר בעזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS):
הוא משמש לכמה דברים בזה אחר זה
איזה דברים?
אני מגדיר אותו קודם כל כמערך עם מחרוזת ריקה בnextPageToken, בשביל תקינות הקריאה הראשונה.
חוץ מזה אין עוד שימושקודם הוא אובייקט שמחזיק מחרוזת ריקה, אחר כך הוא עובר להיות הפרומיס של הבקשה, ואחר כך הגייסון של ניתוח הבקשה.
(אגב אפשר לאחד את הפרומיס שיחזיר גייסון כמו שהראה @Shaya בדוגמא שלו, אין צורך לפצל את זה לשתי שורות)אתה ניצב מול בעיה, איך לבצע את הבקשה הראשונה בלי להכשל, וכדי להתמודד איתה אתה יוצר מעקף ע"י משתנה עם מחרוזת ריקה, זה מעקף, זה לא הדרך הנכונה, הדרך הנכונה היא להסתכל לבעיה בעיניים ולפתור אותה מהשורש
יש דרך לבנות URL בצורה יפה אלגנטית וקריאה, יש מחלקה בשם URL שלוקחת פרמטרים ומחזירה URL תקין עם פרמטרי חיפוש ושאר ירקות, יותר נכון לעבוד איתה למרות שזה כאילו מאריך את הקוד, אבל זה קריא, וזה קל לתחזוקה
-
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים אמר בעזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS):
אני אישית סובר שקוד טוב הוא קוד חסכני (כמובן שמשיג את אותה תוצאה, ובצורה שברורה לי).
קיבלת עצה זהב ממקצוען, וזו לא רק דעתו האישית, זו מוסכמה רווחת ותקן סטנדרטי בענף, אל תחסוך בקוד גם אם נדמה לך שזה חסכוני, כי זה בסוף הרבה יותר יקר..
אגב גם בשמות משתנים אל תחסוך, שם משתנה a1 זה לא תקין בעליל, גם העובדה שהוא משמש לכמה דברים בזה אחר זה זו עבירה פלילית,
-
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים אתה יכול לבדוק את זה בצורה ויזואלית, לפתוח דפדפן רגיל, ולהכנס לכתובת של ה API עם הפרמטר של nextPageTOken ואז תוכל לראות איפה זה נעצר וכבר אין תוצאות יותר, ולהשוות את זה עם הסרטים של הערוץ באמת
-
עזרה - שרשור פרומיסים מותנה וביצוע פעולה רק בסיום כולם (JS)@צדיק-תמים אני זוכר שעבדתי פעם עם ה API שלהם ונתקלתי בבעיה הזו, קראתי על זה גם איפשהו בסטאק, והפתרון היחיד שמצאתי זה לא לסמוך על ה nextPageToken אלא לעשות את הסינון ידנית עם publishedBefore publishedAfter, כלומר אחרי שאתה מקבל 50 תוצאות בדף הראשון, אתה הולך לתוצאה האחרונה, בודק תאריך פרסום שלה, ובבקשה הבאה אתה מבקש את התוצאות שפורסמו לפני התאריך הזה, כך זה נותן לך את ה 50 תוצאות הבאות אחריה.
אבל זה הופך את הפונקציה ליותר מסובכת. -
עזרה - ביטול פיצול שורות מציק בPrettier@צדיק-תמים אמר בעזרה - ביטול פיצול שורות מציק בPrettier:
Prettier
חפש בהגדרות של התוסף את ההגדרה proseWrap, ותנסה להגדיר את זה never
-
הגדרת שפת קוד ברירת מחדל ב-VSCהאמת שהלינק הזה יותר יעיל לפעמים הבאות
https://www.google.com/search?q=vscode+set+defaul+lang&oq=vscode+set+defaul+lang&aqs=chrome..69i57.8631j0j7&sourceid=chrome&ie=UTF-8 -
הגדרת שפת קוד ברירת מחדל ב-VSC -
JWT -
קבלת קוד סטטוס HTTP של כתובת אינטרנט בדרך החסכונית ביותר (בJS) -
נגן וידאו צף להטמעת iframe של יוטיוב (בזמן שהסרטון מופעל)@צדיק-תמים נסה ליצור דוגמא מינימלית כאן
https://jsfiddle.net/