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

时间:2018-07-19 09:44:59

标签: javascript express mongoose promise

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

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()。是什么原因,我应该如何解决?

2 个答案:

答案 0 :(得分:0)

generateAuthToken没有return语句。

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

答案 1 :(得分:0)

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

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