javascript - 这样使用Promise好不好?

标签 javascript node.js promise es6-promise

我试图理解并掌握 Promise,但遇到了一个问题,我不确定这是否是正确的做事方式。

我正在使用nodejs,并且有以下内容: 一个数据库和一个模块,我可以在其中对数据库执行某些操作。在某一时刻,我尝试在数据库中创建一个新用户,并在创建用户后在另一个表中为该用户创建具有其他详细信息的另一个条目。

passport.use('local-signup', new LocalStrategy({
    usernameField: 'username',
    passwordField: 'password',

  },
  function(username, password, done) {

    // Before creating the user access Sequlize beforeCreate method so we can encrypt the password
    User.beforeCreate(function(req) {
      console.log('Encryptying password for user ',req.username)
      return encryptPass(req.password)
      .then(success => {
        req.password = success;
      })
      .catch(err => {
        if (err) console.error(err);
      });
    });

    User.create({
      username: username,
      password: password
    }).then(function(createdUser) {
      console.log(createdUser);
      UserDetails.create({
        id:createdUser.dataValues.id
      }).then((data)=>{
        console.log(data);
        return done(null,createdUser);
      }).catch((error)=>{
        console.log(error)
        return done(error)
      })
    })
    .catch(function(error) {
      console.error(error)
      return done(`${error.message}.`);
    });
  }
));

当我遇到这样的事情时,这是使用 promise 的正确方法吗?

如果您需要更多信息,请告诉我,我会尽力使一切变得更加清晰。

最诚挚的问候, 维克多

最佳答案

您可以稍微简化一下,因为您可以删除内部 catch block ,只需要返回内部 Promise

User.create({
    username: username,
    password: password
}).then(function (createdUser) {
    console.log(createdUser);
    return UserDetails.create({
        id: createdUser.dataValues.id
    }).then((data) => {
        console.log(data);
        return done(null, createdUser);
    })
}).catch(function (error) {
    console.error(error);
    return done(`${error.message}.`);
});

休息看起来还不错

关于javascript - 这样使用Promise好不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49171771/

相关文章:

javascript - 如何从 eBay api 获取 Json 数据以保存为 CSV 格式?

c# - ASP.NET Kendo UI 网格计算列

javascript - 下一步授权 : Extending User schema to include new fields

node.js - 联合验证 : Set minimum array length conditionally

javascript - 发送后如何在 OPEN 就绪状态下保持 websocket 连接?

javascript - 如何使用 Promise.all 并以对象作为输入

javascript - 将 API 和 Promise 与 Angular-modal-gallery 结合使用

javascript - 为什么我们要在事件发射器的订阅方法声明中声明取消订阅方法?

javascript - 同步填充/修改数组并在 promise 内返回修改后的数组

javascript - 为什么当promise调用另一个promise时返回 'undefined'