首页 > 解决方案 > 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()第一个文件中的调用返回的令牌永远不会到达快速代码user.generateAuthToken()。是什么原因,我应该如何解决?

标签: javascriptexpressmongoosepromise

解决方案


generateAuthToken没有return声明。

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


推荐阅读