【问题标题】:Using Class to store all data in a object [duplicate]使用类将所有数据存储在对象中[重复]
【发布时间】:2019-07-08 02:54:10
【问题描述】:

我使用了一个类来获取所有数据以存储在一个对象中。但是成功运行后对象未定义,似乎数据存储在对象(Alloptions)中。

我已经尝试过,但找不到合适的方法

router.get('/:category', (req, res) => {
  let AllOptions;
  let cat4;

  AllOptions = new GetAllOptions(); //show undefined
  let category = req.params.category.replace(/-/g, ' ')
  console.log(AllOptions)
  for (i = 0; i < AllOptions.categories.length; i++) {
    console.log(AllOptions.categories[i].categoryName.replace(/-/g, ' ').toLowerCase())
    console.log(category)
    if (AllOptions.categories[i].categoryName.replace(/-/g, ' ').toLowerCase() == category) {
      cat4 = AllOptions.categories[i].categoryId - 1
    }
  }
})

类对象

class GetAllOptions {
  constructor() {
    this.categories = {};
    this.languages = {};
    this.getJobCategories();
  }
  async getJobCategories() {
    await Category.getAllCategories((err, response) => {

      if (err) {
        //?? how error flash dont know
        return res.json({
          error: ERROR_MSG,
        });
      }
      if (response.length > 0) {
        for (let i = 0; i < response.length; i++) {
          this.categories[response[i].categoryId] =
            response[i];
        }

        for (let i = 0; i < response.length; i++) {
          this.categoriesNames[response[i].categoryName] =
            response[i];
        }

      }
    })
    this.getJobLanguages();
  }

  async getJobLanguages() {
    await Category.getAllLanguages((err, response) => {
      if (err) {
        //?? how error flash dont know
        return res.json({
          error: ERROR_MSG,
        });
      }
      if (response) {
        for (let i = 0; i < response.length; i++) {
          this.languages[response[i].languageId] =
            response[i];
          console.log(this.languages[response[i].languageId])
        }

        for (let i = 0; i < response.length; i++) {
          this.languagesNames[response[i].languageName] =
            response[i];
        }
      }
    })
  }
}

我想等到类运行完成并获取所有数据,但这里显示未定义

【问题讨论】:

  • here 所述,您不能拥有异步构造函数。您可以创建一个进行异步调用的 init 函数。
  • 您正在使用await 语法和callback style function,我认为,只需使用样式async/awaitcallback

标签: javascript node.js ecmascript-6 async-await


【解决方案1】:

您可以异步构造 GetAllOptions 对象:

      constructor (async_param) {
            if (typeof async_param === 'undefined') {
                throw new Error('Cannot be called directly');
            }
        }
        static async build () {
            var async_result = await getJobCategories()();
            return new myClass(async_result);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 2020-12-06
    • 2014-04-12
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多