Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同步/异步AJAX函数的模式_Javascript_Ajax - Fatal编程技术网

Javascript 同步/异步AJAX函数的模式

Javascript 同步/异步AJAX函数的模式,javascript,ajax,Javascript,Ajax,我正在编写一个函数,该函数应该从另一台服务器获取一些JSON,同步或异步都取决于调用方式。在伪代码中,我有: function getData(async, callback) { if (async) { // Get the data... return data; } else { // Get the data... callback(data); } } 看起来很奇怪,同一个函数要么返回

我正在编写一个函数,该函数应该从另一台服务器获取一些JSON,同步或异步都取决于调用方式。在伪代码中,我有:

function getData(async, callback) {
    if (async) {
        // Get the data...
        return data;
    }
    else {
        // Get the data...
        callback(data);
    }
 }

看起来很奇怪,同一个函数要么返回值,要么不返回值。。。我在这里违反了任何最佳实践吗?

我不认为拥有一个有时异步工作,有时不异步的函数有任何意义,因为调用代码必须知道它在做什么,并相应地进行操作。也可以有两个函数,一个用于sync,一个用于async,这使得代码的编写和理解更加简单

此外,执行任何同步ajax调用对用户界面的影响通常都是不好的,因此任何好的用户体验设计都几乎总是避免同步ajax

如果只有一个函数,那么我建议使用异步设计。然后,调用方可以将代码编写为异步样式,这两种方式都可以

此外,您的异步逻辑是反向的。它需要在异步时调用回调

function getData(async, callback) {
    if (async) {
        // get the data in async fashion
        doAjaxCall(function(data) {
            callback(data);
        });

    } else {
        // get the data synchronously
        callback(data);
    }
}

作为一个有趣的参考,jQueryAjax函数是这样建模的。它有一个异步设计,在某些情况下可以传递一个参数来同步工作。

我认为有一个函数有时异步工作,有时不异步,这没有任何意义,因为调用代码必须知道它在做什么,并相应地进行操作。也可以有两个函数,一个用于sync,一个用于async,这使得代码的编写和理解更加简单

此外,执行任何同步ajax调用对用户界面的影响通常都是不好的,因此任何好的用户体验设计都几乎总是避免同步ajax

如果只有一个函数,那么我建议使用异步设计。然后,调用方可以将代码编写为异步样式,这两种方式都可以

此外,您的异步逻辑是反向的。它需要在异步时调用回调

function getData(async, callback) {
    if (async) {
        // get the data in async fashion
        doAjaxCall(function(data) {
            callback(data);
        });

    } else {
        // get the data synchronously
        callback(data);
    }
}

作为一个有趣的参考,jQueryAjax函数是这样建模的。它有一个异步设计,在某些情况下可以传递一个参数来同步工作。

同步ajax的用户体验效果非常负面,以至于它是一个非常糟糕的想法。同步ajax的用户体验效果非常负面,以至于它是一个非常糟糕的想法。