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)
当然,我可以使它异步,但代码将......非常糟糕.而且,我必须使调用此函数的所有函数都异步.你能看到简单的解决方案吗 我会说阻塞是最简单的.
谢谢
正如其他人所指出的,简短的答案是否定的: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,以获取处理回调的更完整方法