【问题标题】:Cannot "desynchronize" function无法“去同步”功能
【发布时间】:2021-04-18 22:08:18
【问题描述】:

我创建了一个 javascript 函数,它人为地“需要时间”才能工作(大约 2 或 3 秒)。这只是一个很长的“for循环”。 我希望该功能不与其他功能同步。 我的意思是我希望该函数快速完成,并且在脚本末尾调用,我希望它的日志出现得太早。 我不想使用:setTimeOut、fetch、filopen...已经是“黑匣子”的承诺... 我的意思是如果需要,同步 javascript 可以变成“异步”。

请问,我该怎么办?我想我将不得不使用异步和等待。 我的目的是不要使用“承诺”声明。目的是去同步不得到任何结果值 这是代码:

var fullTime = function() {
                          var currentdate = new Date(); 
                          return (currentdate.getDate()+"/"+(currentdate.getMonth()+1)+"/" +
                          currentdate.getFullYear()+"-"+currentdate.getHours()+":"+
                          currentdate.getMinutes()+":"+currentdate.getSeconds()); 
                          };
  
var AfficherFullTime =  function(argEvent) {console.log(argEvent + " " + fullTime())  ; } ;
  
var processTakesTime = function () {
                             var i = 0 ;
                             const max = 6000000 ;
                              for (i=1;i<=max;i++) {
                                    if (i== max )
                                                     AfficherFullTime("loizAsynchrone > maximum value at ") ;
                                    else
                                                   { 
                                                   if (i == 1 ) 
                                                                AfficherFullTime("loizAsynchrone > maximum value at ") ;
                                                   else
                                                                fullTime();
                                                   
                                                   }
                              }
} ;
                          
                          
var testNoCallBack = function() {                                                                       
                                     processTakesTime();                    
                                    AfficherFullTime('first log');                                  
                                  };
                                  
testNoCallBack() ;

结果是:

loizAsynchrone > maximum value at........
loizAsynchrone > maximum value at............
first log ....................

应该是:

loizAsynchrone > maximum value at........
first log ....................
loizAsynchrone > maximum value at............

【问题讨论】:

  • 如果你不想使用它们,为什么要标记为 [promise] 和 [async-await]?
  • "我创建了一个 javascript 函数,该函数人为地“需要时间”才能工作。这只是一个很长的“for 循环”。” - 你的问题。当您需要异步行为时,不要编写同步循环。在您的代码中使用异步函数,即setTimeout 来模拟浪费时间。
  • 我的目标不是“必须使用”:setTimeOut, fetch, filopen...经典的javascript,同步指令是否可以因为需要而变为异步...对于多任务工作我知道javascript是一个线程只能工作,但是通过usinc async,是否有可能找到解决方案?
  • 不,不是。如果不实际使用异步函数,就不能使用async/await。如果您需要在后台运行同步(cpu 受限)代码,则需要一个单独的工作线程。
  • 好的,我有我的答案。谢谢你:)

标签: javascript asynchronous async-await promise


【解决方案1】:

感谢给出答案的“Bergi”。

问题(我问): “我的目​​标不是“必须使用”:setTimeOut,fetch,filopen ...经典的javascript,同步指令是否可以因为需要而变得异步...对于多任务工作,我知道javascript是一个线程只工作,但是通过usinc async,是否有可能找到解决方案?”

Bergi 的解决方案/回答: “不,不是。如果不实际使用异步函数,则无法使用 async/await。如果需要在后台运行同步(cpu 受限)代码,则需要单独的工作线程”

谢谢伯吉

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2019-11-21
    • 2022-10-21
    相关资源
    最近更新 更多