Есть ли проблемы с возвратом из функции до выполнения обещания? - PullRequest
7 голосов
/ 21 июня 2020

У меня есть функция javascript (node.js v12) asyn c, которая используется для получения ресурса. Сначала он обращается к кешу, чтобы проверить, кэширован ли ресурс. Если это так, то возвращается кэшированный ресурс. Если это не так, он получает ресурс из пути, помещает его в кеш, а затем возвращает ресурс. Функция для помещения ресурса в кеш - asyn c. Однако нет необходимости ждать, пока это завершится, чтобы вернуть ресурс. Вызовет ли это какие-либо проблемы, если вы вернетесь из функции, пока обещание в функции еще не решено? Мне даже не нужно знать, была ли функция ошибочной, потому что даже если ресурс не может быть помещен в кеш, я все равно хочу вернуть ресурс. Basi c пример ниже:

async function getResource(path) {
  const cachedResource = await getResourceFromCache(path).catch(logError);
  if (cachedResource) {
    return cachedResource;
  } else {
    const resource = await getResourceFromPath(path);
    putResourceInCache(path, resource).catch(logError); // This is an async function but I did not use await
    return resource;
  }
}

app.post('/test', async (req, res) => {
  // Code ...
  const resource = await getResource(path));
  // Code ...
  return res.status(200).send(value);
});

Ответы [ 2 ]

2 голосов
/ 21 июня 2020

Если вы не ждете, пока асинхронная функция вернет значение, это нормально, и вы все равно можете go включить скрипт.

Однако убедитесь, что вы обрабатываете ошибки (что вы и делаете) , поэтому программа не будет красть sh.

1 голос
/ 21 июня 2020

В этом нет ничего плохого. Вам просто нужно обработать любые исключения, которые могут возникнуть. В качестве альтернативы вы можете использовать эмиттеры событий для выполнения такого рода задач. Вызвать событие и получить ресурс фиксации слушателя в кеш

...