2
看看下面的示例代碼,我想知道是否足以在最外面的續集任務上鍊接一個.catch()
,而不是始終將其鏈接在看起來相當混亂的每個任務上。續集錯誤處理
第二個問題是有可能使.then(instance, error)
包含錯誤對象,如果有的話?像貓鼬一樣,第一個參數總是err obj。所以我不需要.catch
一個錯誤,但只需在.then()
回調函數中處理它。
function facebookStrategy() {
return new FacebookStrategy({
clientID: config.facebook.app_id,
clientSecret: config.facebook.app_secret
}, function (accessToken, refreshToken, profile, done) {
process.nextTick(function() {
models.User.findOrCreate({
where: {email: profile.emails[0].value}
}).spread(function (user, created) {
models.UserPassport.findOrCreate({
where: {
// TODO(tsm): check out sequelize composite keys
method: 'facebook',
social_id: profile.id
},
defaults: {
method: 'facebook',
token: accessToken,
social_id: profile.id
}
}).spread(function (userPassport, created) {
userPassport.setUser(user).then(function() {
user.updateAttributes({
first_name: profile.name.givenName,
last_name: profile.name.familyName
}).then(function() {
return done(null, user);
});
});
}).catch(function (err) {
console.log('Error occured: ', err);
return done(err);
});
}).catch(function (err) {
console.log('Error occured: ', err);
return done(err);
});
})
})
}
酷,所以基本上所有sequelize查詢方法可以下到最外面的一個返回一個承諾,錯誤將泡沫。 – tsm