簡體   English   中英

NativeScript / Angular中的延遲或睡眠功能

[英]Delay or Sleep function in NativeScript/Angular

我的睡眠/延遲功能不起作用。

我嘗試使用'rxjs / operators'延遲功能,但是沒有用。

我的代碼:

sentence: string = "Hallo"

wordToMorse(sentence: any) {
        for (var char of sentence) {
            if (char != " ") {
                this.vibrateWord(char);
                this.delay(1000);

            } else {
                this.delay(1000);
            }

        }
    }

vibrateWord(character: any) {
        if (character == "H") {
            this.vibrator.vibrate(500);
        } else if (character == "a") {
            this.vibrator.vibrate(1000);
        } else if (character == "l") {
            this.vibrator.vibrate(500);
        } else if (character == "o") {
            this.vibrator.vibrate(2000);
        }
    }

async delay(ms: number) {
        await new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired"));
    }

我希望發生的是,句子中的字母每次振動后,都應該等待1秒。

您將aysnc await放置在錯誤的位置,請嘗試以下操作:

async wordToMorse(sentence: any) { // <------ Change
    for (var char of sentence) {
        if (char != " ") {
            this.vibrateWord(char);
            await this.delay(1000); // <------ Change

        } else {
            await this.delay(1000); // <------ Change
        }

    }
}

delay(ms: number) { // <------ Change
    return new Promise(resolve => setTimeout(()=>resolve(), ms)).then(()=>console.log("fired")); // <------ Change
}

有一種使用Observables的干凈方法:

from(sentence.split('')).pipe(
      take(sentence.length),
      concatMap(letter => of(letter).pipe(delay(1000))),
      tap(letter => {
        // vibrate logic here
      })
    ).subscribe();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM