Как передать asyn c функцию в качестве параметра - PullRequest
0 голосов
/ 17 марта 2020

Я использую функцию, которая извлекает данные из репозитория GitHub. Возвращает объект с такими показателями, как количество закрытых вопросов и т. Д. c. Эта функция передается в качестве параметра другой функции, которая сохраняет эти метрики в базе данных.

store(extract());

Проблема заключается в том, что функция извлечения является асинхронной (и по какой-то причине она должна быть асинхронной) и не возвращает значения ... Я не знаю, как очень хорошо управлять asyn c. Как заставить store () ждать, пока extract () вернет метрики?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 17 марта 2020

Либо используйте asyn c IIFE , например:

(async () => {
   const result = await extract();
   store(result);
})();

, либо используйте синтаксис classi c:

extract().then(store);
0 голосов
/ 17 марта 2020

Asyn c функция - не что иное, как обещание возврата функции. взять образец.

const getPromise = () =>  Promise.resolve("1")

const store = (fn) => {
  fn().then(console.log)
}
store(getPromise)

const storeCB = (fn, cb) => {
  fn().then(cb)
}
store(getPromise, console.log)

const storeThen = (fn) => {
  return fn().then(x => "append: " + x)
}
storeThen(getPromise).then(console.log)

const getAsync = async () =>  "2"

store(getAsync)


const storeWithAwait = async (fn) => {
  const restult = await fn()
  return restult
}

storeWithAwait(getAsync).then(console.log)
0 голосов
/ 17 марта 2020

Вы пробовали что-то подобное?

(async ()=>{
   const result = await extract();
   store(result);
})()
...