【问题标题】:Delay or Sleep function in NativeScript/AngularNativeScript/Angular 中的延迟或睡眠功能
【发布时间】:2019-08-08 09:20:16
【问题描述】:

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

我尝试使用 '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 秒。

【问题讨论】:

    标签: angular typescript nativescript


    【解决方案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
    }
    

    【讨论】:

    • @SwaX,很高兴知道,BTW 编码快乐 :)
    【解决方案2】:

    有一种使用 Observables 的简洁方法:

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

    【讨论】:

    • from 从一个数组创建一个 Observable,依次发出每个值。 take 意味着您不必担心订阅问题。 concatMap 将传入的排放排队,等待每个子 Observable 完成。 of 从每个字母创建一个新的 Observable,然后延迟一秒。
    猜你喜欢
    • 2010-11-24
    • 1970-01-01
    • 2013-03-03
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多