【问题标题】:How to resolve JS promises after some time? [duplicate]一段时间后如何解决 JS 承诺? [复制]
【发布时间】:2020-04-28 22:29:43
【问题描述】:

我正在学习 JS 承诺。我对如何仅在运行需要 5 秒的 cb 函数后才重新执行 f2 返回的承诺感到困惑。

var cb = function(){
  console.log('5 sec');
}

var f2 = function(){
    return new Promise((resolve,reject)=>{
      setTimeout(cb, 5000);
      console.log('Last line of f2')
     resolve('5RESOLVED')
    });
}

f2().then(res=>{
  console.log(res)
})

当前输出的顺序如下

  • f2 的最后一行
  • 5 已解决
  • 5 秒

我希望输出是 - f2的最后一行 - 5 秒 -5已解决

【问题讨论】:

    标签: javascript promise es6-promise


    【解决方案1】:

    您需要将resolve(…) 调用放在异步cb 中,以便它仅在5 秒后发生。目前您正在立即调用它(在安排回调之后)。使用

    function f2() {
      return new Promise((resolve,reject) => {
        setTimeout(function() {
          console.log('5 sec');
          resolve('5RESOLVED')
        }, 5000);
        console.log('Last line of f2');
      });
    }
    

    更好的是,我建议不要自己编写任何异步回调(这很容易出错),而只处理基于 Promise 的辅助函数:

    function delay(t) {
      return new Promise(resolve => {
        setTimeout(resolve, t);
      });
    }
    async function f2() {
      console.log("last line of f2");
      await delay(5000);
      console.log("5 sec");
      return "5RESOLVED";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多