Как вернуть значение переменной вне вызова функции api, используя jquery или javascript - PullRequest
0 голосов
/ 07 февраля 2019
module.exports = function (ctx, application) {
var API;
var usermandData = [];
var clientmandData = [];
var taskmandData = []

API = {

    GetMandatoryFieldsforUser: function () {
        return MandatoryFields.User;
    },

    GetMandatoryFieldsforClient: function () {
        return MandatoryFields.Client;
    },

    GetMandatoryFieldsforTask: function () {
        return MandatoryFields.Task;
    }

};

var UserFields = $.get("api/mapping/mandatoryfield?type=USER", function (d) {        
    this.mandatoryuserdata = JSON.parse(d.Data);
    this.mandatoryuserdata.forEach(function (data) {
        usermandData.push(data.DisplayName);  // returns  ["First Name", "Last Name", "Location", "Email"]
    });      
})

var ClientFields = $.get("api/mapping/mandatoryfield?type=CLIENT", function (d) {
    this.mandatoryClientdata = JSON.parse(d.Data);
    this.mandatoryClientdata.forEach(function (data) {
        clientmandData.push(data.DisplayName); // returns ["Client Type", "Last Name / Entity Name", "Originating Location", "Responsible Person"],
    });
})

var TaskFields = $.get("api/mapping/mandatoryfield?type=TASK", function (d) {
    this.mandatoryTaskdata = JSON.parse(d.Data);
    this.mandatoryTaskdata.forEach(function (data) {
        taskmandData.push(data.DisplayName);  //returns  ["Client Name", "Period End Date", "Task Type", "Responsible Person"]
    });
})


MandatoryFields = {
    User: usermandData,
    Client: clientmandData,
    Task: taskmandData
}

Reqres.setHandler('Dataexportwizard:getMandatoryfields', function (type) {
   // console.log(mandData)
    switch (type) {
        case "USER": return API.GetMandatoryFieldsforUser();
        case "CLIENT": return API.GetMandatoryFieldsforClient();
        case "TASK": return API.GetMandatoryFieldsforTask();
    }
});

Моя проблема заключается в том, что это асинхронная функция MandatoryFields.User, MandatoryFields.Client и MandatoryFields.Task возвращает null значение, которое мне нужно, чтобы значение usermandData, clientmandData, taskmandData в MandatoryFields.User, MandatoryFields.Client, MandatoryFields.Task поле Какдобиться этого с помощью jquery или javascript.

, поскольку объект MandatoryFields выполняется до метода получения jQuery. Я могу использовать только значения внутри вызова функции, но мне нужно использовать его внутри объекта MandatoryFields, как мне это сделать с помощью jquery

1 Ответ

0 голосов
/ 07 февраля 2019

Одно из лучших решений для обработки асинхронных задач такого типа с использованием «Обещаний» (функция JS добавлена ​​ES6).Попробуйте этот код, может быть, это поможет: -

module.exports = function (ctx, application) {
var API;
var usermandData = [];
var clientmandData = [];
var taskmandData = []

API = {
    GetStepContainerData: function () {
        return StepContainerData;
    },

    GetStepData: function () {
        return stepData;
    },

    GetMandatoryFieldsforUser: function () {
        return MandatoryFields.User;
    },

    GetMandatoryFieldsforClient: function () {
        return MandatoryFields.Client;
    },

    GetMandatoryFieldsforTask: function () {
        return MandatoryFields.Task;
    }

};

Promise.all([
    new Promise(function(resolve,reject){
        $.get("api/mapping/mandatoryfield?type=USER", function (d) {        
            this.mandatoryuserdata = JSON.parse(d.Data);
            this.mandatoryuserdata.forEach(function (data) {
                usermandData.push(data.DisplayName);  // returns  ["First Name", "Last Name", "Location", "Email"]
            });
            resolve();
        });
    }),

    new Promise(function(resolve,reject){
        $.get("api/mapping/mandatoryfield?type=CLIENT", function (d) {
            this.mandatoryClientdata = JSON.parse(d.Data);
            this.mandatoryClientdata.forEach(function (data) {
                clientmandData.push(data.DisplayName); // returns ["Client Type", "Last Name / Entity Name", "Originating Location", "Responsible Person"],
            });
            resolve();
        })
    }),

    new Promise(function(resolve,reject){
        $.get("api/mapping/mandatoryfield?type=TASK", function (d) {
            this.mandatoryTaskdata = JSON.parse(d.Data);
            this.mandatoryTaskdata.forEach(function (data) {
                taskmandData.push(data.DisplayName);  //returns  ["Client Name", "Period End Date", "Task Type", "Responsible Person"]
            });
            resolve();
        });
    })
    ]
).then(function(result){

    // After resolving all the promises this method will execute
    MandatoryFields = {
        User: usermandData,
        Client: clientmandData,
        Task: taskmandData
    }
});


Reqres.setHandler('Dataexportwizard:getMandatoryfields', function (type) {
   // console.log(mandData)
    switch (type) {
        case "USER": return API.GetMandatoryFieldsforUser();
        case "CLIENT": return API.GetMandatoryFieldsforClient();
        case "TASK": return API.GetMandatoryFieldsforTask();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...