Асинхронный setTimeout на основе Promise? Обещание {<pending>} Ошибка - PullRequest
0 голосов
/ 27 августа 2018

Итак, я пытаюсь заставить мою функцию работать с логикой асинхронных таймеров, где мне нужно выполнить computeResult (например, func) после остановки таймера. Чтобы получить контроль над асинхронной логикой setTimeout, я использовал функцию asyncFunc на основе Promise, но она всегда возвращает мне Promise {<pending>}, когда я ее использую.

Где мое падение в этом случае? Спасибо.

P.S. Я также вижу различные сообщения на эту тему на SoF, но это не помогает мне. Не блокируйте мой вопрос только для того, чтобы вырастить свой опыт на SoF

const computeResult = () => {
  return 'sdas'
}

const asyncFunc = () => new Promise(
   r => setTimeout(r, 1000))
     .then(() => computeResult()
);

export default asyncFunc

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Не уверен на 100%, что вы пытаетесь сделать.

Но следующее может быть тем, что вы после.

const computeResult = () => {
   return 'sdas'
}

const asyncFunc = () => new Promise(resolve => 
   setTimeout(() => resolve(computeResult()), 1000)
);

console.log("Wait for computeResult");
asyncFunc().then(r => console.log(r));
0 голосов
/ 27 августа 2018

В этом случае вы пишите все правильно, кроме одного небольшого размышления. Вы забыли выполнить Promise после того, как он был разрешен, поэтому он застрял в состоянии <pending>.

Итак, другими словами, просто напишите после того, как asyncFunc вызовет хвост .then следующим образом asyncFunc().then(your_sersult => ddoSomething(your_sersult))

Вот и все. Вы получите то, что хотите:)

Подробнее об этом можно прочитать на сайте MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

...