同步/异步AJAX函数的模式
Pattern for synchronous/asynchronous AJAX function
我正在编写一个函数,该函数应该从另一台服务器获取一些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函数是这样建模的。它有一个异步设计,在某些情况下可以传递一个参数以同步工作。
相关文章:
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- 将值传递到jQuery成功函数中的引导模式
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- 为什么在javascript中的模块模式中实现Lazy函数时范围会发生变化
- 为模式设置的值在通过 AJAX 成功函数设置时不显示
- 将值传递给模式窗口中的 JavaScript 函数
- 传递参数时如何避免模块模式中的 getter/setter 函数
- 未知的 JavaScript 函数声明模式
- 如何在 JavaScript 函数中获取传递给引导模式的参数
- 函数调用的变量更改未显示在角度引导模式窗口中
- twitter引导模式——如何将数据传递给回调函数
- 如何在javascript函数中显示引导模式
- 在引导模式中使用“ng click”触发函数
- 模块模式:函数未定义
- 同步/异步AJAX函数的模式
- 是'要求(..)'常见的javascript模式或库函数
- javascript严格模式下oop函数的全局初始化
- Javascript DRY设计模式-函数与对象
- 在JavaScript中实现模块模式函数的最佳方式