Javascript 如何在jquery中访问forEach之外的值

Javascript 如何在jquery中访问forEach之外的值,javascript,jquery,html,Javascript,Jquery,Html,编辑 我这里的问题是我需要访问forEach循环外部的字段值。如何使用jquery或javascript实现这一点 编辑 查看编辑后的问题“我想在MandatoryFields中使用该字段数组。用户,但如果我使用它,它不会显示值”,您应该在jquery中使用ajax方法 "api/mapping/mandatoryfield?type=USER" returns ["First Name", "Last Name", "Location", "Email", "Password"], 由于

编辑

我这里的问题是我需要访问forEach循环外部的字段值。如何使用jquery或javascript实现这一点

编辑


查看编辑后的问题“我想在MandatoryFields中使用该字段数组。用户,但如果我使用它,它不会显示值”

,您应该在jquery中使用ajax方法

"api/mapping/mandatoryfield?type=USER" returns 

["First Name", "Last Name", "Location", "Email", "Password"],
由于$.get()是一个异步方法,因此可以使用async/await从$.get方法的回调中访问返回的值

function GetMandatoryFieldsforUser( data)
    {
         var field= [];
         var scriptUrl = "api/mapping/mandatoryfield?type=USER";
         $.ajax({
            url: scriptUrl,
            type: 'get',
            dataType: 'html',
            async: true,
            success: function(data) {
               var self = this;
               self.dt = [];
               self.firmdata = JSON.parse(data.Data);
               console.log(self.firmdata);
               self.firmdata.forEach(function (item) {
                 field.push(item.DisplayName);
               })
               console.log(field) 
            } 
         });
         return field;
    }

这将实现$.ajax:

GetMandatoryFieldsforUser: async function (data) {
    var field = [];
    const returnedField = await $.get("api/mapping/mandatoryfield?type=USER", function (data) {
        var self = this;
        self.dt = [];
        self.firmdata = JSON.parse(data.Data);
        console.log(self.firmdata);
        self.firmdata.forEach(function (item) {
            field.push(item.DisplayName);
        })
        console.log(field)   //able to print value
        return field;                          
    }).promise()

    console.log(returnedField) // not able to print value

},

问题不在于forEach方法。$。get()方法是一个异步方法。因此,首先执行$.get()方法之外的console.log(字段),然后只调用$.get()的回调。thanks@BearNithi如何克服这个问题issue@chethu使用jQuery.ajax并在检索数据后依靠其自己的“done”函数执行代码。请,提供此请求api/mapping/mandatoryfield?类型返回的数据=USER@GrafiCodeStudio检查问题中的回答警告:使用async:false绝对不是一个好选择。您所写的与我的相同,但不起作用expected@chethu我读了你最近的帖子,我编辑了我的答案并添加了注释,以澄清您必须在.done()部分中处理ajax检索到的数据。我得到了这一点,但我想在其他文件中使用此字段值。如果我在ajax函数中返回此字段值,则它不会在该文件中显示这些值
function GetMandatoryFieldsforUser( data)
    {
         var field= [];
         var scriptUrl = "api/mapping/mandatoryfield?type=USER";
         $.ajax({
            url: scriptUrl,
            type: 'get',
            dataType: 'html',
            async: true,
            success: function(data) {
               var self = this;
               self.dt = [];
               self.firmdata = JSON.parse(data.Data);
               console.log(self.firmdata);
               self.firmdata.forEach(function (item) {
                 field.push(item.DisplayName);
               })
               console.log(field) 
            } 
         });
         return field;
    }
GetMandatoryFieldsforUser: async function (data) {
    var field = [];
    const returnedField = await $.get("api/mapping/mandatoryfield?type=USER", function (data) {
        var self = this;
        self.dt = [];
        self.firmdata = JSON.parse(data.Data);
        console.log(self.firmdata);
        self.firmdata.forEach(function (item) {
            field.push(item.DisplayName);
        })
        console.log(field)   //able to print value
        return field;                          
    }).promise()

    console.log(returnedField) // not able to print value

},
GetMandatoryFieldsforUser: function (data) {
  var field = [];

  $.ajax({
    url: "api/mapping/mandatoryfield?type=USER"

  }).done(function(data) {
    // THIS PORTION IS EXECUTED AFTER DATA IS LOADED
    var self = this;
    self.dt = [];
    self.firmdata = JSON.parse(data.Data);
    console.log(self.firmdata);
    self.firmdata.forEach(function (item) {
      field.push(item.DisplayName);
    })
    console.log(field)

    /*
    USE return HERE!
    */
    return field; // OR SOMETHING ELSE

  })

  // THIS WON'T WORK, BECAUSE DATA IS RETRIEVED IN ASYNC!
  console.log(field) 
},