从承诺中回复另一个承诺

mus*_*oom 3 javascript promise q

我有一个对象的承诺,并希望获得该对象的属性的承诺.我该怎么办?

var user = Q.nfcall(User.findOne, {
    _id: userId
});
var accessToken = Q.Promise(function (resolve, reject) {
    user.then(function (user) {
        if (!user) return reject(new Error('User not found.'));
        if (!user.github.accessToken) return reject(new Error('Access token not found.'));
        return resolve(user.github.accessToken);
    }, function(err) {
        return reject(err);
    });
});
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所尝试的,但我不确定它是否是最好的(或最正确的)方式.

Ber*_*rgi 7

不要使用延迟反模式1!没有必要使用Promise构造函数,.then已经返回了对其回调结果的承诺:

var accessToken = user.then(function(user) {
    if (!user) throw new Error('User not found.');
    if (!user.github.accessToken) throw new Error('Access token not found.');
    return user.github.accessToken;
});
Run Code Online (Sandbox Code Playgroud)

[1]:你已经看到了自己的错误:-)