如何在使用类的node.js项目中正确使用Promise?

时间:2019-05-09 15:49:04

标签: node.js class project

(在底部的解决方案)

项目建设

我正在将“简单” node.js项目转换为完整对象项目node.js。我发现资源可以更好地组织我的文件,但是类仍然有问题。我已经在对象中完成了php项目,但是节点JS结构似乎很特殊。 我咨询过:

据我了解:

  • app.js是我的路由器,从中可以定义我需要响应客户端请求的控制器。
  • / routes是我的控制器实例化对象并使用其方法的地方。 project organization

我的课程位于根目录下的文件夹中,但可以将其移至public / javascript文件夹中。我的问题是将应用程序层代码限制在应该访问数据库的类中。 例如,仅User类具有更新数据库中用户名的方法。因此,在我的控制器(/路由)中,我不需要任何sql查询(顺便使用sequelize)。

我不知道怎么办

我试图在控制器中做一个承诺,在该控制器中,我调用类的方法来执行查询并返回结果。

var user = new User();
var users = new Promise(function(resolve, reject) {
    user.select();
});
Promise.all([users]).then(function(values){
    console.log(values);
}
  console.log(users);
)

我在课堂上做

models.user.findAll({
    attributes: ['user_login','user_points','user_id']
}).then(
    users => {
        resolve(users);
    }
)

在这里,未定义解决方法。但是,如果我在像这样调用类方法之后放下决心:

var users = new Promise(function(resolve, reject) {
 user.select();
 resolve(result);
});

结果未定义,它将在不等待查询完成的情况下解决。

问题

由于我没有进行实验,也没有找到关于此主题的任何详细或近期的话题,所以我不知道如何进行。 我的第一个问题是:问题是否可能来自文件组织(或更普遍地说,这是我的通常/良好做法)。 我的第二个问题是如何使用类和node.js处理此类结构,因此我的示例应该可以工作。

感谢您的帮助。 我将补充一点,因为我没有找到关于该主题的最新主题,所以我非常有兴趣制作逐步指南,以使用app / routes / classes和ES6 js在node.js中构建完整的对象项目。目的是更好地理解它并将其提供给我的主管,以便他可以更正它并将其用于将来的新人并发布。

解决方案

由于@estus,我现在不明白您可以将Promise存储在变量中。 它允许我在此变量上使用.then。 var result = a.select(); result.then(function(result) { console.log('my result : ', result); });

在该类中,仅当您不想解决Sequelize承诺时才返回结果:

users => {
   return users;
}

0 个答案:

没有答案