JavaScript无法获取从一个then()调用返回到另一个then()调用的值



我正在尝试执行以下代码:

UserSchema.methods.generateAuthToken = function () {
const user = this;
const access = 'auth';
const token = jwt.sign({_id: user._id.toHexString(), access}, 'abc123');
user.tokens.push({access, token});
user.save().then(() => {
return token;
});
};

在我的快递文件中,我有以下代码:

app.post('/users', (req, res) => {
const body = _.pick(req.body, ['email', 'password']);
const user = new User(body);
user.save().then(() => {
return user.generateAuthToken();
}).then((token) => {
res.header('x-auth', token).send(user);
}).catch((err) => {
console.log(err);
res.status(400).send(err);
});
});

问题是,从第一个文件中的user.save().then()调用返回的令牌永远不会到达express代码user.generateAuthToken()。原因是什么?我应该如何解决?

generateAuthToken没有return语句。

如果您想返回then返回的承诺,那么您必须明确地这样做。

您需要将架构更新为以下内容:

UserSchema.methods.generateAuthToken = function () {
const user = this;
const access = 'auth';
const token = jwt.sign({_id: user._id.toHexString(), access}, 'abc123');
user.tokens.push({access, token});
user.save().then(() => {
return token;
});
};

generateAuthToken不会在代码中返回Promise

最新更新