Как я могу вернуть обещание, используя синтаксис async / await? - PullRequest
0 голосов
/ 24 апреля 2020

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

Я сделал следующее:

upload = async (param, onFinish) => {
  const upload = new Upload(param)
  let response = await upload.start()

  response = doSomeWork(response)

  onFinish(response)
}

И я использую это так:

upload(param, (response) => {console.log(response)} )

Как вы можете видеть, я немного запутался с функцией asyn c в javascript, я вижу, как это выглядит странно, и одна из причин это потому, что я везде читал, что асинхронная c функция всегда должна возвращать обещание.

Но мой вопрос заключается в том, как в этом случае я могу вернуть обещание, если мне сначала нужно выполнить некоторую работу в ответе? Каков наилучший способ реализации этого, так что моя функция asyn c это solid?

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

1 Ответ

4 голосов
/ 24 апреля 2020

Если функция async, то она уже возвращает Promise. Просто верните свое значение, и оно будет передано этому Promise:

upload = async (param) => {
  const upload = new Upload(param);
  let response = await upload.start();

  response = doSomeWork(response);

  return response;
}

Тогда вы можете ожидать этого результата:

let response = await upload(param);
console.log(response);

Или использовать .then() в возвращенном Promise:

upload(param).then(response => console.log(response));
...