Sliby a statické hodnoty

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!