首页 > 解决方案 > 无法“去同步”功能

问题描述

我创建了一个 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............

标签: javascriptasynchronousasync-awaitpromise

解决方案


感谢“Bergi”,他给出了答案。

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

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

谢谢伯吉


推荐阅读