【问题标题】:How do I write a synchronous function with parameters as an asynchronous function (Javascript)?如何将带参数的同步函数编写为异步函数(Javascript)?
【发布时间】:2017-06-28 20:45:46
【问题描述】:

假设我有以下代码:

同步版本:

    var waitingToGetValue = heavyProcessingFunc (para1, para2);
    response.send(waitingToGetValue);

我试着环顾四周,但我得到的只是没有参数的函数。

异步尝试:

    heavyProcessingFunc(para1, para2, (function(waitingToGetValue){
       response.send(waitingToGetValue);
    });

我需要将这两个参数发送给函数。该函数返回一个值,我需要使用该值将其发送到响应。

如果我把它放在异步格式中,这有关系吗?谁能向我推荐一个视频/资源,可以轻松解释同步与异步的区别:过去几天我阅读了很多材料,但它对承诺、回调和尝试访问这些函数之外的值越来越感到困惑。

【问题讨论】:

  • 同步意味着一切都停止,直到收到响应(通常很糟糕,因为 UI 锁定并在您等待时变得无响应)。异步意味着代码在发出请求时继续处理。这更好,因为 UI 不会被阻塞,但确实会引入不知道响应何时返回的问题。这就是我们需要回调的原因。
  • 使函数接受回调并不会使它异步。这取决于函数的作用。例如。 Array#forEach 也接受回调,但不是异步的。我不清楚你的问题到底是什么。
  • “异步格式”没有任何帮助。您需要使函数实际上异步执行某些操作,并且如果它只是几轮繁重处理之间的一小段延迟。
  • 你的actual problem是什么?
  • @Bergi 真的是两个问题。一个是格式化上面的以下代码。第二个是我可以清楚而轻松地解释有关 javascript 的同步和异步性质的所有内容。丹尼尔回答了第一个问题。

标签: javascript asynchronous synchronous


【解决方案1】:

    function heavyProcessingFunc(para1, para2, callback){
    	console.log('We have two params to work with', para1, para2);
    	setTimeout(function(){// Simulating a long request
    		callback("Now we send the response by calling the callback"); // This is waitingToGetValue
    	},3000);
    }
    
    heavyProcessingFunc("para1", "para2", function(waitingToGetValue){
       console.log(waitingToGetValue);
       // response.send(waitingToGetValue);
    });

【讨论】:

  • 使用 setTimeout(fn,0) 创建 asyc 很常见
猜你喜欢
  • 2021-12-31
  • 1970-01-01
  • 2021-12-19
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多