javascript - 如何使用 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.User
,MandatoryFields.Client
并且MandatoryFields.Task
返回null
值我需要将 , , 的值推usermandData
入 clientmandData
, taskmandData
,MandatoryFields.User
字段 MandatoryFields.Client
如何MandatoryFields.Task
使用 jquery 或 javascript 实现它。
由于 MandatoryFields 对象在 jQuery get 方法之前执行我只能在函数调用中使用值,但我需要在 MandatoryFields 对象中使用它我如何使用 jquery 来实现它
解决方案
处理这些类型的异步任务的最佳解决方案之一是使用“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();
}
});
推荐阅读
- node.js - 节点运行函数 Sync,在返回之前等待外部值。异步/等待
- xpath - 如何 xpath 进入网页的“主要”部分?
- javascript - 如何通过编写一个函数来分发图片?
- javascript - 我正在尝试使用 Jquery 在 Javascript 中使用“添加选项卡”方法在同一位置加载另一个页面
- c++ - 双精度与浮点精度问题
- python - 是否需要将 wgs84 转换为 web mercarto 投影?
- c++ - 在不使用 c 字符串函数的情况下从 c 字符串中删除元音
- python - 如何为一维 CNN 格式化一维数组数据
- angular - 带有开玩笑部分匹配的角度快照测试
- jenkins - 詹金斯自动为作曲家生成错误的配置