אסינכרוניות

שלוות נפש

משתמש פעיל
ערב טוב
יש לי בעיה עם אסינכרוניות (אולי בהבנה..) אשמח לעזרה
יש לי את הפונקציה הבאה:

async getWords(level: number, num1: number){
debugger
this.service
.ArrWords(level)
.subscribe(
async (result: WordView) => {
this.text = result
console.log(this.text);
this.word = await this.toSpeech(num1)
console.log(this.word)
return(this.word)
},
(err) => {
console.log(err);
}
)
// console.log(word1)
return("vauhj")
}
אני מעונייינת שיחזיר את ה RETURN שבאדום ומחזיר לי את הכתום
לפי ה debugger הוא עוקף על כל הסרוויס ומגיע ישר לסוף
אשמח להבין למה
תודה רבה!!
 

s976

משתמש סופר מקצוען
הנדסת תוכנה
D I G I T A L
יש מצב שאת עורכת את ההודעה ומסמנת את הקוד כקטע קוד?

JavaScript:
async getWords(level: number, num1: number){
debugger
this.service
.ArrWords(level)
.subscribe(
async (result: WordView) => {
this.text = result
console.log(this.text);
this.word = await this.toSpeech(num1)
console.log(this.word)
return(this.word)
},
(err) => {
console.log(err);
}
)
// console.log(word1)
return("vauhj")
}

הסתדרתי ...
 

ari rm

משתמש פעיל
בס"ד

בגלל האסינכרונית הוא מופיע לפני הפונקציה, צריך להוריד את return בסוף ולהכניס אותו בתוך הerror
JavaScript:
async getWords(level: number, num1: number){
    debugger
    this.service
    .ArrWords(level)
    .subscribe(
        async (result: WordView) => {
            this.text = result
            console.log(this.text);
            this.word = await this.toSpeech(num1)
            console.log(this.word)
            return(this.word)
        },
        (err) => {
            console.log(err);
            return("vauhj")
        }
    )
    // console.log(word1)
}
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
או להוסיף await
JavaScript:
.subscribe(
        await async (result: WordView) => {
נראה לי שזה גם אמור לעבוד.
 

ari rm

משתמש פעיל
או להוסיף await
JavaScript:
.subscribe(
        await async (result: WordView) => {
נראה לי שזה גם אמור לעבוד.
אולי לזאת הייתה הכוונה.
JavaScript:
await this.service
    .ArrWords(level)
    .subscribe(
        async (result: WordView) => {
ואז באמת אפשר להשאיר את הreturn בסוף
 

s976

משתמש סופר מקצוען
הנדסת תוכנה
D I G I T A L
האמת, לא בטוח שהבנתי את השאלה (לדעתי חסרים כאן פרטים). אבל אם אנסה לנחש, נראה לי שזה דומה לשאלה הבאה:
תראו את הקוד דלהלן, תסבירו מה הייתה כוונת המשורר, תסבירו למה זה לא עובד, תציעו איך אפשר לתקן
JavaScript:
function subscribe(callback) {
    setTimeout(() => {
        callback('Did you subscribe? Your message is ready...');
    }, 500)
}


async function getMessageWhenReady() {
    subscribe((message) => {
        return message;
    })
}


(async () => {
    const result = await getMessageWhenReady();
    console.log(result);
})()

אם זה רלוונטי, אצרף תשובה. או שמישהו אחר אולי רוצה לרשום תשובה. (בכל מקרה, מאוד כדאי להבין לבד. זה תסבוך קלאסי של JS)
לנוחיותכם https://jsfiddle.net/s976/xyf96me4/
 
נערך לאחרונה ב:

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
האמת, לא בטוח שהבנתי את השאלה (לדעתי חסרים כאן פרטים). אבל אם אנסה לנחש, נראה לי שזה דומה לשאלה הבאה:
תראו את הקוד דלהלן, תסבירו מה הייתה כוונת המשורר, תסבירו למה זה לא עובד, תציעו איך אפשר לתקן
JavaScript:
function subscribe(callback) {
    setTimeout(() => {
        callback('Did you subscribe? Your message is ready...');
    }, 500)
}


async function getMessageWhenReady() {
    subscribe((message) => {
        return message;
    })
}


(async () => {
    const result = await getMessageWhenReady();
    console.log(result);
})()

אם זה רלוונטי, אצרף תשובה. או שמישהו אחר אולי רוצה לרשום תשובה. (בכל מקרה, מאוד כדאי להבין לבד. זה תסבוך קלאסי של JS)
לנוחיותכם https://jsfiddle.net/s976/xyf96me4/
לא נכנסתי לפידל, אבל אני לא מבין את ה-"תסבוך" getMessageWhenReady לא מחזיר כלום, אז זה console.log(undefined)

אני חושב שה"תסבוך" הוא האשליה שsetTimeout הוא פונקציה אסינכרונית שמחזירה ערך, והיא לא.
 

s976

משתמש סופר מקצוען
הנדסת תוכנה
D I G I T A L
לא נכנסתי לפידל, אבל אני לא מבין את ה-"תסבוך" subscribe לא מחזיר כלום, אז זה console.log(undefined)

אני חושב שה"תסבוך" הוא האשליה שsetTimeout הוא פונקציה אסינכרונית שמחזירה ערך, והיא לא.
התסבוך הוא - איך לפתור את זה
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
התסבוך הוא - איך לפתור את זה
JavaScript:
return new Promise(r => {

setTimeout(()=>r(callback('message')), 500);

})

עריכה:
וכמובן
JavaScript:
return await subscribe((message) => { // ...

עריכה 2:
יש לך עוד כאלה?
 
נערך לאחרונה ב:

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קח

א שִׁיר מִזְמוֹר לְדָוִד:ב נָכוֹן לִבִּי אֱלֹהִים אָשִׁירָה וַאֲזַמְּרָה אַף כְּבוֹדִי:ג עוּרָה הַנֵּבֶל וְכִנּוֹר אָעִירָה שָּׁחַר:ד אוֹדְךָ בָעַמִּים יי וַאֲזַמֶּרְךָ בַּלְאֻמִּים:ה כִּי גָדוֹל מֵעַל שָׁמַיִם חַסְדֶּךָ וְעַד שְׁחָקִים אֲמִתֶּךָ:ו רוּמָה עַל שָׁמַיִם אֱלֹהִים וְעַל כָּל הָאָרֶץ כְּבוֹדֶךָ:ז לְמַעַן יֵחָלְצוּן יְדִידֶיךָ הוֹשִׁיעָה יְמִינְךָ וַעֲנֵנִי:ח אֱלֹהִים דִּבֶּר בְּקָדְשׁוֹ אֶעְלֹזָה אֲחַלְּקָה שְׁכֶם וְעֵמֶק סֻכּוֹת אֲמַדֵּד:ט לִי גִלְעָד לִי מְנַשֶּׁה וְאֶפְרַיִם מָעוֹז רֹאשִׁי יְהוּדָה מְחֹקְקִי:י מוֹאָב סִיר רַחְצִי עַל אֱדוֹם אַשְׁלִיךְ נַעֲלִי עֲלֵי פְלֶשֶׁת אֶתְרוֹעָע:יא מִי יֹבִלֵנִי עִיר מִבְצָר מִי נָחַנִי עַד אֱדוֹם:יב הֲלֹא אֱלֹהִים זְנַחְתָּנוּ וְלֹא תֵצֵא אֱלֹהִים בְּצִבְאֹתֵינוּ:יג הָבָה לָּנוּ עֶזְרָת מִצָּר וְשָׁוְא תְּשׁוּעַת אָדָם:יד בֵּאלֹהִים נַעֲשֶׂה חָיִל וְהוּא יָבוּס צָרֵינוּ:
נקרא  11  פעמים

אתגר AI

מלכות ה' • אתגר 119

לוח מודעות

למעלה