JQuery извлекает данные по обещанию, когда закончите - PullRequest
0 голосов
/ 29 марта 2019

Я хочу получить данные из нескольких JS-файлов, когда документ готов:

A.js

var dataController;
let loadedData_haz;

$(document).ready(function () {
    dataController = new DataController();
    loadedData_A = dataController.getloadedLanguage().A;
    fillForm_A(loadedData_haz);
});

B.js

var dataController;
let loadedData_B;

$(document).ready(function () {
    dataController = new DataController();
    loadedData_B = dataController.getloadedLanguage().B;
    fillForm_B(loadedData_B);
});

C.js

var dataController;
let loadedData_C;

$(document).ready(function () {
    dataController = new DataController();
    loadedData_C = dataController.getloadedLanguage().C;
    fillForm_C(loadedData_haz);
});

В моем файле data.controller.js я получаю JSON-объект с данными для вышеупомянутых файлов, таких как ...

data.controller.js

let dataService;

$(document).ready(function () {
    dataService = new DataService();
    loadLanguage();
});

function DataController() {

    if(!dataService) {
        dataService = new DataService();
    }

    /*
    getter
     */
    this.getloadedLanguage = function () {
        return dataService.getloadedLanguage();
    };
}

let loadLanguage = function () {
    var m = dataService.loadLanguagePromise();
    $.when(m).done(dataService.handleData);
};

А в data.service.js я читаю содержимое моего TXT.file

data.service.js

letloadedLanguage;

function DataService() {

    /*
    getter
     */
    this.getloadedLanguage = function () {
        return loadedLanguage;
    };
}

DataService.prototype.handleData = function (response) {
    loadedLanguage = JSON.parse(response);
    localStorage.setItem('lang', response);
};

DataService.prototype.loadLanguagePromise = function () {
    return new Promise(function (resolve, reject) {
        $.ajax({
            url: "php/services/readLanguage.php",
            type: "GET",
            async: true,
            dataTyp: 'json',
            success: function (data) {
                resolve(data);
            },
            error: function (xhr, desc, err) {
                reject(Error("It broke"));
            }
        })
    })
};

Каждый раз, когда я перезагружаю свое приложение, загруженные данные не определены.Иногда загруженные данные_B не определены, а иногда загруженные данные_B и загруженные данные_C не определены.Это нормально из-за моего кода.

Поэтому я хотел бы изменить метод loadLanguage в data.service.js на функцию обратного вызова с new Promise .Я предполагаю, что это правильный способ сделать это.Любые улучшения или рекомендации приветствуются!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...