使用回调加载数据。使用 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.