javascript - 如何在 javascript 类完成后获得最终响应

标签 javascript promise

我编写了一个 JavaScript 类来用数据填充表单。但是,如果还有剩余的输入未放入表单中,我希望它们在响应中返回。表单填充后如何获取剩余的 json。

类(class)

 class Deserialize 
    {
        constructor(o)
        {
            this.o = o;
            this.leftovers = null;
            this.get();
            return new Promise((resolve,reject) => {

            resolve(this.leftovers);
        });
    }

    get()
    {
        console.log(1);
        let parent = this;
        return axios.get(this.o.url).then(function(response) {
            parent.o.data = response.data;
            console.log(2);
            parent.populate();
        });
    }

    populate()
    {
        console.log(3);
        let parent = this;
        let inputs = document.querySelectorAll(this.o.form + ' input, ' + this.o.form + ' textarea, ' + this.o.form + ' select');

        inputs.forEach(function(v, i) {
            let name = v.name;
            let type = v.type;
            let data = parent.o.data;

            Object.keys(data).forEach(function(i) {
                if (i == name) {
                    switch (type) {
                        case 'checkbox':
                            v.checked = true;
                        break;
                        case 'radio':
                            if (v.value == data[i]) v.checked = true;
                        break;  
                        case 'select-one':
                        case 'textarea':
                        case 'text':
                        case 'tel':
                        case 'date':
                        case 'time':
                        case 'email':
                        case 'hidden':
                        case 'password': 
                        case 'color':
                            v.value = data[i];
                        break;
                    }

                    delete parent.o.data[i];
                }
            }); 
        });

        this.leftovers = parent.o.data;
    }
}

我这样初始化

const deserialize = new Deserialize({
    form: '#account-form',
    url: '/account/getAccountJson/'
}).then(function(response) {
    console.log(response);
});

如何获取表单填充后剩余的输入?

最佳答案

你可以简化它。

class Deserialize {
  constructor(o) {
    this.o = o;
    this.leftovers = null;
    return this.get();
  }

  get() {
    console.log(1);
    let parent = this;
    return axios.get(this.o.url).then((response) =>{
      parent.o.data = response.data;
      return parent.populate();
    });
  }

   async populate() {
    console.log(3);
    // Rest of the code
    this.leftovers = parent.o.data;
   return this.leftovers;
  }
}

不要在构造函数中进行异步调用。 反模式

class Deserialize {
  constructor(options) {
    this.options = options;
    this.leftovers = [];
  }
  get() {
    return axios.get(this.options.url).then((response) => {
      this.options.data = response.data;
      return this.populate();
    });
  }
  populate() {
    let inputs = document.querySelectorAll(
      this.options.form +
        " input, " +
        this.options.form +
        " textarea, " +
        this.options.form +
        " select"
    );
    inputs.forEach((v, i) => {
      let name = v.name;
      let type = v.type;
      let data = this.options.data;
      data.forEach((i) => {
        if (i == name) {
          switch (type) {
            case "checkbox":
              v.checked = true;
              break;
            case "radio":
              if (v.value == data[i]) v.checked = true;
              break;
            case "select-one":
            case "textarea":
            case "text":
            case "tel":
            case "date":
            case "time":
            case "email":
            case "hidden":
            case "password":
            case "color":
              v.value = data[i];
              break;
          }
        } else {
          this.leftovers.push(this.options.data[i]);
        }
      });
    });
    return this.leftovers;
  }
}

const deserialize = new Deserialize({
  form: "#account-form",
  url: "/account/getAccountJson/",
})
  .get()
  .then(function (response) {
    console.log(response);
  });

关于javascript - 如何在 javascript 类完成后获得最终响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61022965/

相关文章:

javascript - JS - 使用 $q.when() 按顺序运行 promise,最后我该如何添加?

javascript - 如何在 promise.then () 中检索对此的引用?

javascript - AngularJS 验证和 promise

javascript - tabs.getCurrent() 结果未定义?

javascript - 虚拟地球未捕获类型错误 : undefined is not a function

javascript - 向 ASP.NET MVC JsonResult 添加无法解析的内容

javascript - 滚动上响应式固定导航样式

javascript - 在 JavaScript 中有条件地删除数组中的重复项

javascript - html -- 点击按钮时显示元素

javascript - 为什么 R.ifElse 不返回 Promise?