Javascript 使用回调加载数据。使用ES6承诺是否有更好的解决方案?
我有一个方法,它在项目中的几个地方被调用。我已经用这个方法做了。第一个方法调用doajaxget、在类属性中缓存数据和fire回调。第二个调用方法仅使用缓存数据调用回调。我想添加同步加载数据的功能。方法应返回日期。我添加了一个额外的参数来调用{async:false},但我想知道是否有更好的解决方案使用ES7承诺 这是我的回调解决方案Javascript 使用回调加载数据。使用ES6承诺是否有更好的解决方案?,javascript,ajax,ecmascript-6,es6-promise,ecmascript-2016,Javascript,Ajax,Ecmascript 6,Es6 Promise,Ecmascript 2016,我有一个方法,它在项目中的几个地方被调用。我已经用这个方法做了。第一个方法调用doajaxget、在类属性中缓存数据和fire回调。第二个调用方法仅使用缓存数据调用回调。我想添加同步加载数据的功能。方法应返回日期。我添加了一个额外的参数来调用{async:false},但我想知道是否有更好的解决方案使用ES7承诺 这是我的回调解决方案 export class loadData { constructor() { this.data = []; } get
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);
});
我想添加同步加载数据的功能
我不认为你真的想要那样。如果您只需要异步功能的同步语法,请查看
async
/wait
如果该函数是异步的,则无法使其同步。承诺不是使异步函数成为同步函数的一种方法。谢谢,但是es7 async/Wait没有像这样的返回值:let a=loadDataTest.getData({async:false})@Whitcik:这是let a=await loadDataTest.getData()
在异步函数中
@Whitcik:为什么你认为需要使函数同步?是的,这将是工作,但它将是等待只有在异步函数,我需要等待在所有的应用程序的数据。也许将来我需要同步加载数据。不,你不需要。你不希望你的整个应用程序挂起。您希望使整个应用程序异步。