首页 > 解决方案 > 如何使用 jquery 或 javascript 在 api 函数调用之外返回变量值

问题描述

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.UserMandatoryFields.Client并且MandatoryFields.Task返回null值我需要将 , , 的值推usermandDataclientmandData, taskmandData ,MandatoryFields.User字段 MandatoryFields.Client 如何MandatoryFields.Task 使用 jquery 或 javascript 实现它。

由于 MandatoryFields 对象在 jQuery get 方法之前执行我只能在函数调用中使用值,但我需要在 MandatoryFields 对象中使用它我如何使用 jquery 来实现它

标签: javascriptjqueryhtmlmarionette

解决方案


处理这些类型的异步任务的最佳解决方案之一是使用“Promises”(ES6 添加的 JS 功能)。试试这个代码可能会有所帮助: -

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();
    }
});

推荐阅读