在promise中返回callback()和callback()

时间:2016-05-11 06:02:40

标签: javascript node.js

参见下面的代码,如果我要删除所有返回关键字,该函数仍然按预期工作,这导致我与callback()混淆并在与promise混合时返回callback()

有人可以向我解释一下,可以删除以下哪个return

是执行过的done()函数吗?

const localLogin = new LocalStrategy(localOptions, (email, password, done) => {
  User.find({ where: { email } }).then(user => {
    if (!user) {
      return done(null, false);
    }
    return user.validPassword(password, (err, isMatch) => {
      if (err) {
        return done(err, false);
      }
      if (!isMatch) {
        return done(null, false);
      }
      return done(null, user);
    });
  }).catch(err => {
    return done(err, false);
  });
});

1 个答案:

答案 0 :(得分:1)

这些return只会破坏user.Find和user.validPassword回调执行。例如,它可以被其他条件替换如下:

const localLogin = new LocalStrategy(localOptions, (email, password, done) => {
    User.find({ where: { email } }).then(user => {
        if (!user) {
            done(null, false);
        }
        else {
            user.validPassword(password, (err, isMatch) => { // return at this point is not needed, because there is nothing to break after this function
                if (err) {
                    done(err, false);
                }
                else{
                    if (!isMatch) {
                        done(null, false);
                    }
                    else {
                        done(null, user);
                    }

                }
            });
        }
    }).catch(err => {
        done(err, false);
    });
});

如您所见,return允许摆脱许多其他条件。

return callback()是一个很好的做法: