同步/异步AJAX函数的模式

Pattern for synchronous/asynchronous AJAX function

本文关键字:模式 函数 AJAX 异步 同步      更新时间:2024-02-09

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

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

奇怪的是,同一个函数要么返回值,要么不返回值。。。我是否违反了任何最佳实践?

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

此外,执行任何同步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函数是这样建模的。它有一个异步设计,在某些情况下可以传递一个参数以同步工作。