【问题标题】:How do I make my function as asynchronous in Javascript? [duplicate]如何在 Javascript 中使我的函数异步? [复制]
【发布时间】:2018-04-04 03:22:58
【问题描述】:

我正在尝试了解 Javascript 的异步行为,我们如何在正常功能中实现。例如下面的代码,我正在尝试实现一个自定义的 SetTimeout 函数,该函数可以异步工作。它应该调用函数muCsutSetInterval 并转到console.log("after");

请提出正确的方法。感谢您的帮助..

var myCustSetInterval = function (time, callback){
    let initial = new Date();
    let current;
    while(true){
        current = new Date();
        if(current.getTime()-initial.getTime()===time){
            break;
        }
    }
    callback();
}

console.log("before");

myCustSetInterval(5000,()=>{
    console.log("Callback");
});

console.log("after");

【问题讨论】:

  • 你不能。使用setTimeout
  • javascript 是同步的。要获得异步结果,您必须依赖不受该规则约束的 apis
  • @Igor - 我可能错了,但我认为这不是 OP 所要求的。我相信 OP 有兴趣了解 Async/Await 和 Promise 对象的使用。
  • @RandyCasburn - 也许吧。不过,我在问题中没有看到任何对关键字 async/await 的引用。
  • 正确 - 按标签进行

标签: javascript node.js asynchronous async-await


【解决方案1】:

您不能编写异步 javascript。但是,javascript API 提供了异步行为的内部函数(setTimeoutfetch),您可以使用这些函数。所以你需要那些异步内部调用来实际编写异步代码。例如:

function customSetTimeout(callback, ms, ...args) {
  const ends = Date.now() + ms;
  (function check() {
     if(new Date >= ends) {
       callback(...args);
     } else {
       setTimeout(check, 0); // <- the internal call
     }
  })()
}

【讨论】:

  • 为什么人们不赞成这个?完全有效的答案。
猜你喜欢
  • 2014-06-21
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2019-05-01
  • 2020-06-07
  • 2020-05-06
  • 1970-01-01
相关资源
最近更新 更多