【问题标题】:How can I make this function that returns promise not block the other codes? [duplicate]我怎样才能使这个返回承诺的函数不阻塞其他代码? [复制]
【发布时间】:2019-02-26 03:07:48
【问题描述】:

我是 Promise 的新手。这是我的代码

  function heavyProcess(){

    var ts = + new Date();
    while((+ new Date() - 2000) < ts ){
      //2 second delay to simulate lengthy process
    }
    console.log('after 2 seconds');

    return Promise.resolve("Done");
  }

  console.log("START");
  heavyProcess().then(function(resolve){
    console.log(resolve);
  });
  console.log("END");

它的输出是

START
after 2 seconds
END
Done

我怎样才能做到这一点?我不想调用繁重的进程阻塞下一个代码。

START
END
after 2 seconds
Done

我一直在阅读有关 Promise 的文章,但我似乎无法完成这项工作。

【问题讨论】:

  • 2 second delay 是什么?
  • 我只想模拟较长的处理时间
  • 您可能想了解网络工作者
  • 我尝试在Promise.resolve(function(){console.log('DOne')}); 中传递一个函数,但没有成功

标签: javascript es6-promise


【解决方案1】:

这是你需要的吗?

    var p = () => new Promise((resolve, reject) => {
setTimeout(() => {
console.log('after 2 seconds');
resolve("Done");
  }, 2000);
});

console.log("START");
p().then((data) => {
  console.log(data);
});
console.log("END");

【讨论】:

  • 是的,这段代码输出了我的预期结果,但它使用了 setTimeout。我想在不阻塞执行下一个代码的情况下异步模拟对冗长进程的调用
  • 那么你应该像@samsonthehero 所说的那样使用网络工作者
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 2016-08-28
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 2021-06-07
相关资源
最近更新 更多