【发布时间】:2016-07-04 12:34:25
【问题描述】:
我有一个在项目的多个地方调用的方法。我已经做了方法。第一个方法调用做 Ajax 获取,在类属性中缓存数据并触发回调。第二个调用方法只调用带有缓存数据的回调。我想添加同步加载数据的功能。该方法应返回日期。我添加了一个额外的参数来调用 {async: false},但我想知道使用 ES7 Promise 是否有更好的解决方案?
这是我的回调解决方案。
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
});
【问题讨论】:
-
如果函数是异步的,你不能让它同步。 Promise 不是一种使异步函数成为同步函数的方法。
标签: javascript ajax ecmascript-6 es6-promise ecmascript-2016