使用类将所有数据存储在对象中[重复]

Posted

技术标签:

【中文标题】使用类将所有数据存储在对象中[重复]【英文标题】: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 【参考方案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);
        

【讨论】:

以上是关于使用类将所有数据存储在对象中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

简单的java数据类型总结

说明在创建数据库时如何合理规划数据库的物理存储结构和逻辑存储结构

C++ STL 内存管理:堆栈还是堆?

使用准备好的语句存储空值时 SQL 数据类型无效 [重复]

例外:从意图存储ArrayList时“无法转换为java.util.ArrayList”

存储过程的优点