ben*_*e89 0 javascript ajax jquery
这是我正在使用的一些伪代码(以及我通常使用的地方async: false;):
function getData(){
var obj = {};
if(!settings.data){
$.ajax({
url: '/someendpoint',
async: false,
success: function(data){
obj = data;
}
});
} else {
obj = settings.data;
}
return obj;
}
Run Code Online (Sandbox Code Playgroud)
所以我们有一个返回一个对象的函数.现在,如果我们已经有了一些数据,我们只需分配这些数据,但如果不这样做,我们需要从服务器请求数据.是时候用了async: false?因为在返回obj之前我们需要暂停执行以获取数据?
我一次又一次地处理这个概念,async: false大多数时候都是这样.有人可以概述一个更好的方法吗?
拥抱Web的异步特性.当然,它是范式转换,但是当天的多线程也是如此,在我看来,现在使用Deferred对象在jQuery中处理它的方式使其优于多线程.这就是Node.js变得如此受欢迎的原因.
不要像在网络上或其他答案中那样使用回调函数.了解Deferred和Promise对象,而不是返回数据,返回一个承诺,您可以使用该承诺将行为附加到该承诺"已解决"时.
function getData(){
var obj;
if(!settings.data){
obj = $.get('/someendpoint');
} else {
obj = $.when(settings.data);
}
return obj;
}
Run Code Online (Sandbox Code Playgroud)
然后,调用者可以在可用时使用此数据,如下所示:
var promise = getData();
promise.done(function (data) {
// Do something with the data.
});
Run Code Online (Sandbox Code Playgroud)
起初会感到尴尬,因为你不再返回数据,而是对数据的"承诺",但过了一段时间你就会'得到它'.相信我.
使用简单的回调机制
function getData(callback){
var obj = {};
if(!settings.data){
$.ajax({
url: '/someendpoint',
success: function(data){
callback(data)
}
});
} else {
callback(settings.data)
}
}
getData(function(data){
//do things which depends on data
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1343 次 |
| 最近记录: |