Wie man dann eine Verzögerung zum Versprechen hinzufügt [duplicate]

Lesezeit: 2 Minuten
fetch() {   
    return axios.get('/rest/foo')
        //.then(response => {throw new Error(response)}) // Uncomment to test network error
        //.then( <<add delay here>> ) // Uncomment to simulate network delay
}

Wie füge ich dem letzteren Block eine Verzögerung hinzu, damit er eine bestimmte Zeit wartet, bevor er die Kontrolle an die Abruf-Anrufer übergibt und dann blockiert?

Geben Sie ein Versprechen von der zurück then Handler, der wartet:

.then(() => new Promise(resolve => setTimeout(resolve, 1000)))

Wenn Sie den Wert des Versprechens “durchgeben” wollen, dann

.then(x => new Promise(resolve => setTimeout(() => resolve(x), 1000)))

Um diesen Boilerplate überall zu vermeiden, schreiben Sie eine Utility-Funktion:

function sleeper(ms) {
  return function(x) {
    return new Promise(resolve => setTimeout(() => resolve(x), ms));
  };
}

dann verwenden Sie es wie in

.then(sleeper(1000)).then(...)

  • Vielen Dank für diese Lösung, die für mich mit einer geringfügigen Änderung für meinen Fall gut funktioniert hat: Innerhalb einer asynchronen Funktion können Sie einfach schreiben: await new Promise(resolve => setTimeout(resolve, 1000))

    – jsaven

    13. Juli 2019 um 10:23 Uhr


  • Ab Node.js 16 können Sie auch die Timers Promises-API.

    – Neugieriger Sam

    9. Dezember 2021 um 11:45 Uhr

Benutzer-Avatar
TJ Crowder

Dies ist eine der seltenen Situationen, in denen Sie ein neues Versprechen erstellen:

fetch() {   
    return axios.get('/rest/foo')
        .then(value => new Promise(resolve => {
                setTimeout(() => {
                    resolve(value);
                }, delayInMilliseconds);
            })
        );
}

Aber statt einer einmaligen hätte ich (in der Tat) eine Utility-Funktion:

function wait(ms, value) {
    return new Promise(resolve => setTimeout(resolve, ms, value));
}

Dann:

fetch() {   
    return axios.get('/rest/foo')
        .then(value => wait(delayInMilliseconds, value));
}

Hier ist wait mit TypeScript-Typen (danke MEMark!):

function wait<T>(ms: number, value: T) {
    return new Promise<T>((resolve) => setTimeout(resolve, ms, value));
}

  • Mit TypeScript-Eingaben: function wait<T>(ms: number, value: T) { return new Promise<T>((resolve) => setTimeout(resolve, ms, value)); }

    – MEMark

    22. Mai 2020 um 9:52 Uhr


1144980cookie-checkWie man dann eine Verzögerung zum Versprechen hinzufügt [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy