--- title: async function Ausdruck slug: Web/JavaScript/Reference/Operators/async_function tags: - Experimental - Function - JavaScript - Operator - Primary Expression translation_of: Web/JavaScript/Reference/Operators/async_function --- <div>{{jsSidebar("Operators")}}</div> <p>Das <strong><code>async function</code></strong> Schlüsselwort kann benutzt werden, um <code>async</code> Funktionen in Ausdrücken zu benutzen.</p> <p>Man kann asynchrone Funktionen auch mit einem <a href="/de/docs/Web/JavaScript/Reference/Statements/async_function" title="The async function keyword can be used to define async functions inside expressions.">async Funktionsstatement</a> definieren.</p> <h2 id="Syntax">Syntax</h2> <pre class="syntaxbox">async function [<em>name</em>]([<em>param1</em>[, <em>param2[</em>, ..., <em>paramN</em>]]]) { <em>statements</em> }</pre> <p>Seit ES2015 kann man auch <a href="/de/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Pfeilfunktionen</a> benutzen.</p> <h3 id="Parameter">Parameter</h3> <dl> <dt><code>name</code></dt> <dd>Der Funktionsname. Kann weggelassen werden, wenn die Funktion anonym ist. Der Name ist nur lokal im Funktionsrumpf erreichbar.</dd> <dt><code>paramN</code></dt> <dd>Der Name eines Arguments, welches der Funktion übergeben wird.</dd> <dt><code>statements</code></dt> <dd>Die Statements, welche den Funktionsrumpf definieren.</dd> </dl> <h2 id="Beschreibung">Beschreibung</h2> <p>Ein <code>async function</code> Ausdruck ist sehr ähnlich zu {{jsxref('Statements/async_function', 'async Funktionsstatements')}} und haben fast die selbe Syntax. Der Hauptunterschied zwischen einem <code>async</code> Funktionsausdruck und einem <code>async</code> Funktionsstatement ist der Funktionsname, welcher bei <code>async</code> Funktionsausdrücken weggelassen werden kann, um anonyme Funktionen zu erstellen. Ein <code>async</code> Funktionsausdruck kann als {{Glossary("IIFE")}} (Immediately Invoked Function Expression) genutzt werden, welche Ausgeführt werden, nachdem sie definiert wurde. Mehr Informationen dazu gibt es im Kapitel über <a href="/en-US/docs/Web/JavaScript/Reference/Functions">Funktionen</a>.</p> <h2 id="Beispiele">Beispiele</h2> <h3 id="Einfaches_Beispiel">Einfaches Beispiel</h3> <pre class="brush: js">function resolveAfter2Seconds(x) { return new Promise(resolve => { setTimeout(() => { resolve(x); }, 2000); }); }; var add = async function(x) { // async function expression assigned to a variable var a = await resolveAfter2Seconds(20); var b = await resolveAfter2Seconds(30); return x + a + b; }; add(10).then(v => { console.log(v); // prints 60 after 4 seconds. }); (async function(x) { // async function expression used as an IIFE var p_a = resolveAfter2Seconds(20); var p_b = resolveAfter2Seconds(30); return x + await p_a + await p_b; })(10).then(v => { console.log(v); // prints 60 after 2 seconds. }); </pre> <h2 id="Spezifikationen">Spezifikationen</h2> <table class="standard-table"> <thead> <tr> <th scope="col">Spezifikation</th> <th scope="col">Status</th> <th scope="col">Kommentar</th> </tr> </thead> <tbody> <tr> <td>{{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}}</td> <td>{{Spec2('ESDraft')}}</td> <td>Initiale Definition in ES2017.</td> </tr> </tbody> </table> <h2 id="Browserkompatibilität">Browserkompatibilität</h2> <div> <p>{{Compat("javascript.operators.async_function_expression")}}</p> </div> <h2 id="Siehe_auch">Siehe auch</h2> <ul> <li>{{jsxref("Statements/async_function", "async function")}}</li> <li>{{jsxref("AsyncFunction")}} Objekt</li> <li>{{jsxref("Operators/await", "await")}}</li> </ul>