【问题标题】:Async setTimeout on Promise based? Promise {<pending>} Error基于 Promise 的异步 setTimeout?承诺 {<pending>} 错误
【发布时间】:2019-02-02 06:15:09
【问题描述】:

所以,我试图让我的函数与异步定时器逻辑一起工作,我需要在定时器停止后执行computeResult(例如func)。为了控制 setTimeout 异步逻辑,我使用了基于 Promise 的 asyncFunc 函数,但当我使用它时它总是返回我 Promise {&lt;pending&gt;}

在这种情况下,我的跌倒在哪里?谢谢。

附: 我还在 SoF 上看到了有关此主题的各种帖子,但这对我没有帮助。不要为了让你在 SoF 上的 EXP 成长而阻止我的问题

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

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

export default asyncFunc

【问题讨论】:

  • 是的,一个promise确实会返回一个promise,..你要么await this,要么使用then回调。
  • @Keith 我对承诺的了解很差......你能更广泛地描述一下我的情况吗?

标签: javascript timer promise async-await settimeout


【解决方案1】:

在这种情况下你写得很好,除了一点点思考。 Promise 解决后您忘记执行它,这就是它停留在&lt;pending&gt; 状态的原因。

因此,换句话说,只需在asyncFunc 之后调用.then 尾部,就像下一个方式asyncFunc().then(your_sersult =&gt; ddoSomething(your_sersult)) 一样

就是这样。你会得到你想要的:)

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

【讨论】:

  • "Promise 解决后你忘记执行了" - 嗯?一个人不能“执行”一个承诺,它不是一个功能。什么意思?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2020-03-04
    • 2018-10-11
    • 2020-07-09
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多