首页 > 解决方案 > 如何使用类在 node.js 项目中正确使用 Promise?

问题描述

(底部的解决方案)

项目建设

我正在将一个“简单”的 node.js 项目转换为完整的对象项目 node.js。我找到了可以更好地组织我的文件的资源,但我仍然遇到类问题。我在object中做过php项目,但是nodejs结构似乎很特别。我咨询过:

据我了解:

我的课程位于根目录的文件夹中,但我可以将其移至 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);
    }
)

正如预期的那样,resolve 没有定义。但是,如果我在像这样调用类方法之后立即解决:

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

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

问题

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

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

解决方案

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

在课堂上,您只返回结果,因为您不想解决 Sequelize 承诺:

users => {
   return users;
}

标签: node.jsclassproject

解决方案


推荐阅读