Return 承诺中的另一个承诺
Return another promise from a promise
我有一个对象的承诺,我想得到一个 属性 该对象的承诺。我应该怎么做?
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);
});
});
这是我迄今为止尝试过的方法,但我不确定它是否是最好(或最正确)的方法。
不要使用deferred antipattern1!无需使用 Promise
构造函数,.then
已经 returns 你对其回调结果的承诺:
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;
});
[1]:你 seen yourself 多么容易出错 :-)
我有一个对象的承诺,我想得到一个 属性 该对象的承诺。我应该怎么做?
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);
});
});
这是我迄今为止尝试过的方法,但我不确定它是否是最好(或最正确)的方法。
不要使用deferred antipattern1!无需使用 Promise
构造函数,.then
已经 returns 你对其回调结果的承诺:
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;
});
[1]:你 seen yourself 多么容易出错 :-)