基于Promise的异步setTimeout吗?承诺{<pending>}错误

时间:2018-08-27 16:59:01

标签: javascript timer promise async-await settimeout

因此,我试图将函数与异步计时器逻辑一起使用,在计时器停止后,我需要在其中执行computeResult(例如,func)。为了控制setTimeout异步逻辑,我使用了基于Promise的asyncFunc函数,但使用它时总是返回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 :(得分:1)

不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));

答案 1 :(得分:0)

在这种情况下,您可以写得很好,除了一点点思考。解决后,您忘记执行using System.Text.RegularExpressions; var patternToMatch = "[0-9]{3}card\.json"; var regex = new Regex(patternToMatch, RegexOptions.IgnoreCase); if (regex.IsMatch(qnaResult)) { // Do something... } ,这就是为什么它停留在Promise状态的原因。

因此,换句话说,就像在另一种方式<pending>调用asyncFunc尾部之后.then

仅此而已。您将得到想要的东西:)

您可以在MDN网站上阅读有关此内容的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise