我有一些JavaScript代码可以从两个来源中提取数据。
第一个来源是本地网络存储
第二个来源是AJAX请求。
条件很简单:
function getMyData(){
if (window.localStorage['myData'] != null)
{
return window.localStorage['myData'];
}
else
{
networkTools.ajax("geyMyData", function (data)
{
return data;
})
}}
但问题是AJAX是异步进程,我不希望代码在getMyData()
返回之前继续。
我知道我可以使用回调,但是只想等到这个函数返回一些东西然后继续执行。 (不仅是这种情况,而且是一般知识。)
这可能吗?
答案 0 :(得分:2)
使用回调
function getMyData(callback){
if (window.localStorage['myData'] != null)
{
callback(window.localStorage['myData'];)
}
else
{
networkTools.ajax("geyMyData", function (data)
{
callback(data);
})
}
}
如何调用getMyData
getMyData(function(data){
//your code
});
或者您可以将ajax请求作为同步请求。
答案 1 :(得分:1)
执行此操作的最佳方法是使用回调函数。
您不希望JavaScript阻止网络请求之类的内容,因为您的网页会完全无法响应。
这就是你要做的:
function getMyData(callback){
if (window.localStorage['myData'] != null)
{
return window.localStorage['myData'];
}
else
{
networkTools.ajax("geyMyData", function (data)
{
callback(data);
});
}
}
答案 2 :(得分:0)
最好的选择是使用回调调用getMyData并将您的函数分解为调用者 - > getMyData - >打回来。可以执行同步请求,但最好不要因为它会在调用完成之前锁定浏览器。
function gotData(data){
console.log("got data:",data);
}
function someFunction(){
...
getMyData(gotData);
}
function getMyData(callback){
if (window.localStorage['myData'] != null)
{
callback(window.localStorage['myData']);
}
else
{
networkTools.ajax("geyMyData", function (data)
{
callback(data);
})
}}
我没有包含如何执行同步请求,因为这样做很糟糕,但是如果你真的想要这样做,那么可以在任何地方找到它(比如MDN developer.mozilla.org/en-US/docs/ DOM / XMLHttpRequest的)