
פניה לסרבר באמצעות HttpClient
קדם ‹ Forums ‹ הייטק ‹ Web Development ‹ פניה לסרבר באמצעות HttpClient
-
פניה לסרבר באמצעות HttpClient
פורסם ע"י ד הייטק on 27/03/2023 ב1:41 pmהיי,
אני פונה לסרבר (ב C#) מקליינט שכתוב באנגולר באמצעות הסיפריה HttpClient.
ההאזנה לקריאה מתבצעת באמצעות subscribe.
הסרבר מבצע פעולה מורכבת וארוכה, ועוד בטרם מסיים, הקליינט פונה שוב לאותה פעולה בסרבר (באופן אוטומטי).
כלומר, כל עוד לא חזרה תשובה מהסרבר, הקליינט מנסה לגשת שוב.
ניסיתי להשתמש באופציה של pipe(take(1)).subscribe(…),וכן להגדיר timeOut, אך ללא הועיל…
אם את יודעת איך למנוע את פניה חוזרת ולגרום לקליינט להמתין לתשובה, אשמח לתגובתך.
תודה.
מרים לוי הגיבה לפני 2 שנים 3 חברות · 3 תגובות -
3 תגובות
-
0
0
0
חברה חדשה
את יכולה לנסות את זה<div>
async someMethod() {
const response = await this.httpClient.get(‘https://some-server.com/some-path’).toPromise();
console.log(response);
}
או את זה:
import { debounceTime } from ‘rxjs/operators’;
httpClient.get(‘/some/api’).pipe(
debounceTime(500)
).subscribe((response) => {
// handle response here
});
או להגדיר retry(0) ואז הוא לא יפנה שוב לסרבר עד קבלת תשובה …
</div>
-
0
0
0
חברה חדשה
היי,
ראשית, תודה על התייחסותך…
ניסיתי כבר בעבר את האופציה של async ו await,
הוא באמת ממתין לתשובה ולא ממשיך לבצע את המשך הפונקציה, אך הבעיה עדיין קיימת, מנסה לשלוח שוב.לגבי ה debounceTime – מעדיפה פתרון שלא מבוסס על הגדרה של זמן. אורך הפעילות בסרבר עשוי להשתנות בהתאם לעומס שבשרת.
retry(0) – גם לא עוזר… (למיטב הבנתי זו הגדרה שאומרת כמה פעמים לנסות שוב במקרה שיש שגיאה…)
-
0
4
0
חברה חדשה
היי
שאלתי בשבילך את צאט ג’יפיטי והוא המליץ להשתמש ב async/await גם בצד שרת וגם בצד לקוח.
להלן התשובה המלאה:כדי למנוע את הפניה החוזרת מהקליינט לסרבר עד שלא חזרה תשובה מהסרבר, ישנם כמה אפשרויות:
-
שימוש בפונקציית async/await בקליינט ובסרבר – ניתן לכתוב את הפונקציה המקורית בסרבר כפונקציה אסינכרונית שמשתמשת ב async/await למניעת החזרת תשובה לקליינט עד שסיימה את הפעולה המורכבת. בקליינט גם ניתן להשתמש ב async/await כדי לחכות לתשובה מהסרבר לפני שנעבור לשלב הבא בקוד.
-
שימוש בחסימת thread בקליינט – ניתן להשתמש בחסימת thread בקליינט כדי לחכות לתשובה מהסרבר לפני שנעבור לשלב הבא בקוד. זו אפשרות פחות מומלצת, מכיוון שהשימוש בחסימת thread יכול לגרום לעצירת היישום לתגובה.
בכל אופן, אני ממליץ להשתמש בפונקציות async/await על מנת למנוע כפל בקשות לסרבר וגם להבטיח שהיישום ימשיך לתפקד גם במהלך המתנה לתשובה מהסרבר.
בהצלחה!
-
-
-
Log in to reply.