NVI*_*NVI 7 javascript synchronization asynchronous callback
我想将异步函数转换为同步函数.
function fetch() {
var result = 'snap!';
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function messyCallback(data){
result = data;
});
return result;
}
document.write(fetch());?Run Code Online (Sandbox Code Playgroud)
结果总是"快速!",因为$.getJSON完成后运行fetch().
我的第一个想法是:
function fetch() {
var result = 'snap!';
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function messyCallback(data){
result = data;
});
while (true) {
if (result != 'snap!') return result;
}
}Run Code Online (Sandbox Code Playgroud)
它不起作用,也吹掉了浏览器.
我在JS 1.7中读到了关于生成器和迭代器的内容,但我不知道如何将它应用于我的问题.
这个问题并不是关于jQuery的.而不是$ .getJSON可以是任何其他异步函数.
另请参阅此问题:暂停JavaScript执行而不锁定浏览器
完全按照自己的意愿行事不起作用.您无法在单线程事件驱动的环境中从异步(仅反过来!)创建同步性.您应该接受语言的异步性质,并围绕处理回调开发自己的一致风格,以便您的代码可读/可维护.例如,您可以选择在回调闭包内从不做任何实际工作,但为了清楚起见,只需调用另一个顶级函数/方法.