使用回调加载数据。使用 ES6 Promises 有更好的解决方案吗?
Load data using Callback. Is there a better solution using ES6 Promises?
我有一个方法在项目的多个地方被调用。我已经完成了方法。第一个方法调用做 Ajax 获取,在 class 属性 中缓存数据并触发回调。第二种调用方法仅使用缓存数据调用回调。我想添加同步加载数据的功能。该方法应返回日期。我添加了一个额外的参数来调用 {async: false},但我想知道是否有更好的使用 ES7 promises 的解决方案?
这是我的回调方案。
export class loadData {
constructor() {
this.data = [];
}
getData({callback, async = true}){
let syncData = this.data;
if( this.data.length === 0 ){
$.ajax({
beforeSend: authorizationManager.addAuthorizeHeader(),
url: apiUrl + '/Data/datadata',
dataType: 'json',
cache: true,
async: async
}).done((data)=>{
if(async) callback(data);
this.data = data;
syncData = data;
});
} else {
if(async) callback(this.data);
}
if(async === false) return syncData;
}
}
loadDataTest = new loadData();
异步调用
loadDataTest.getData({
callback: (data) =>{
console.log(data);
}
});
呼叫同步
let a = loadDataTest.getData({
async: false
});
承诺几乎总是更好的解决方案。当然它们永远不会同步,但这通常也是更好的解决方案。这是它的样子:
export class loadData {
constructor() {
this.promise = null;
}
getData() {
if (this.promise == null) {
this.promise = Promise.resolve($.ajax({
beforeSend: authorizationManager.addAuthorizeHeader(),
url: apiUrl + '/Data/datadata',
dataType: 'json',
cache: true
}));
}
return this.promise;
}
}
然后调用:
loadDataTest.getData().then((data) => {
console.log(data);
});
I would like to add the ability to load data synchronously
我不认为你真的想要那个。如果您想要的只是异步功能的同步语法,请查看 async
/await
.
我有一个方法在项目的多个地方被调用。我已经完成了方法。第一个方法调用做 Ajax 获取,在 class 属性 中缓存数据并触发回调。第二种调用方法仅使用缓存数据调用回调。我想添加同步加载数据的功能。该方法应返回日期。我添加了一个额外的参数来调用 {async: false},但我想知道是否有更好的使用 ES7 promises 的解决方案?
这是我的回调方案。
export class loadData {
constructor() {
this.data = [];
}
getData({callback, async = true}){
let syncData = this.data;
if( this.data.length === 0 ){
$.ajax({
beforeSend: authorizationManager.addAuthorizeHeader(),
url: apiUrl + '/Data/datadata',
dataType: 'json',
cache: true,
async: async
}).done((data)=>{
if(async) callback(data);
this.data = data;
syncData = data;
});
} else {
if(async) callback(this.data);
}
if(async === false) return syncData;
}
}
loadDataTest = new loadData();
异步调用
loadDataTest.getData({
callback: (data) =>{
console.log(data);
}
});
呼叫同步
let a = loadDataTest.getData({
async: false
});
承诺几乎总是更好的解决方案。当然它们永远不会同步,但这通常也是更好的解决方案。这是它的样子:
export class loadData {
constructor() {
this.promise = null;
}
getData() {
if (this.promise == null) {
this.promise = Promise.resolve($.ajax({
beforeSend: authorizationManager.addAuthorizeHeader(),
url: apiUrl + '/Data/datadata',
dataType: 'json',
cache: true
}));
}
return this.promise;
}
}
然后调用:
loadDataTest.getData().then((data) => {
console.log(data);
});
I would like to add the ability to load data synchronously
我不认为你真的想要那个。如果您想要的只是异步功能的同步语法,请查看 async
/await
.