0

我有一些 JavaScript 代码可以从 2 个来源中提取数据。

第一个来源是本地网络存储

第二个来源是 AJAX 请求。

条件很简单:

    function getMyData(){
    if (window.localStorage['myData'] != null)
    {
        return window.localStorage['myData'];
    }
    else
    {
        networkTools.ajax("geyMyData", function (data)
        {
            return data;
        })
    }}

但问题是 AJAX 是异步进程,我不希望代码继续运行,直到getMyData()返回一些东西。

我知道我可以使用回调,但只想等到这个函数返回一些东西然后继续执行。(不仅适用于这种情况,而且适用于一般知识。)

那可能吗?

4

3 回答 3

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 请求作为同步请求。

于 2013-05-19T13:36:08.983 回答
1

最好的方法是使用回调函数。

您不希望您的 JavaScript 阻止诸如网络请求之类的事情,因为您的网页将变得完全没有响应。

你会这样做:

function getMyData(callback){
    if (window.localStorage['myData'] != null)
    {
        return window.localStorage['myData'];
    }
    else
    {
        networkTools.ajax("geyMyData", function (data)
        {
            callback(data);
        });
    }
}
于 2013-05-19T13:39:16.070 回答
0

The best option would be to call getMyData with a callback and break your functions up into caller -> getMyData -> callback. it is possible to do a synchronous request but you'd better not because it locks up the browser until the call is done.

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);
        })
    }}

I did not include how to do a synchronous request because it's bad to do so but if you really want to do it than how to it can be found anywhere (like MDN developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest)

于 2013-05-19T13:39:22.920 回答