JavaScript - 同步等待异步操作(睡眠)

Fis*_*Fis 7 javascript asynchronous promise async-await

我知道它在这里被多次询问,很多次回答这不是应该怎么做的方式,而是再一次:)

是否有可能以某种方式调用异步函数(例如timer/ajax调用),基本上是常见的异步任务并同步等到它结束而没有100%的CPU使用率并阻止浏览器?

简单的回答就足够了 - 是或否.如果没有我必须根据"异步方式"中的异步操作编写所有代码,否则,它会更好;)

想象一下:

updateCSS("someurl.css")

function updateCSS(url) {

   var css = getCachedResource(url);

   css = css.replace(/regexp/gm, function(curUrl) {
     base64 = atob(getCachedResource(curUrl))
     return "data:image;base64," + base64
   })

}

function getCachedResource(url) {
  
  //...
  
  if (cached) {
    
    return cached
    
  } else {
    
    // doajax...    
    // watfor
    
    return loaded
  }
  
}
Run Code Online (Sandbox Code Playgroud)

当然,我可以使它异步,但代码将......非常糟糕.而且,我必须使调用此函数的所有函数都异步.你能看到简单的解决方案吗 我会说阻塞是最简单的.

谢谢

Ray*_*her 0

正如其他人所指出的,简短的答案是否定的:Javascript 在大多数使用环境中都是单线程的。你所要做的就是在 getCachedResource() 的另一个回调中处理 CSS

像这样的东西:

function updateCSS(url) {
    getCachedResource(url, function(css) {
        // process the css
    });
}

function getCachedResource(url, done) {
    //...
    if (cached) {
        cachedCSS = ...
        done(cachedCSS);
    } else {
        $.ajax(
        {
            // ...
            success: function(result) {
                // Get the css from the response
                done(css);
            }
            // ...
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

查看 jQuery“延迟”对象或 Javascript Promise,以获取处理回调的更完整方法