Async může hodit skutečný klíč do ozubených kol našich programovacích pracovních postupů, a to vše navzdory skutečnosti, že async je moderní vzor JavaScriptu. I když async/await pomáhá, někdy dochází k nejasnostem ohledně způsobu, jak mít jedinou funkci, která vrací hodnotu, ať už existuje nebo potřebuje k načtení Promise.
Klíčová věc, kterou je třeba si zapamatovat, je, že funkce jsou deklarovány jako async
automaticky vrátí Promise, takže nepotřebujete explicitně vrátit existující obsah pomocí Promise.resolve(content)
:
async function getValueOrFetch(ojbOrInfo) { // If the value exists, immediately return it if(ojbOrInfo) { return ojbOrInfo; } // Return the promise-based info return asyncFunctionToGetInfo(ojbOrInfo); }
Podívejme se na skutečný příklad:vracení obsahu z mezipaměti namísto provádění fetch
zavolejte a vyzvedněte je:
const cache = { /* url: content */ }; // Async function that returns cached content or retrieves fresh content async function getInfo(url) { // Check for value in cache if (cache[url]) { // Return the content, no need for Promise.resolve return cache[url]; } // Get the content fresh const content = await fetch("https://www.facebook.com").then(r => r.text()); cache[url] = content; return content; }
Mým hlavním cílem tohoto příspěvku je, abyste pochopili, že return Promise.resolve(data)
není potřeba u asynchronních funkcí – můžete jednoduše vrátit hodnotu a bude zabalena do příslibu!