Javascript 续集错误处理
看看下面的示例代码,我想知道在最外层的sequelize任务上只链接一个Javascript 续集错误处理,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,看看下面的示例代码,我想知道在最外层的sequelize任务上只链接一个.catch()是否足够,而不是总是在每个看起来很混乱的任务上链接它 第二个问题是是否可以使。然后(实例,错误)包含错误对象(如果有)?就像猫鼬一样,第一个参数总是errobj。因此,我不必。捕捉错误,只需在回调函数中处理它即可 function facebookStrategy() { return new FacebookStrategy({ clientID: config.facebook.app_id,
.catch()
是否足够,而不是总是在每个看起来很混乱的任务上链接它
第二个问题是是否可以使。然后(实例,错误)
包含错误对象(如果有)?就像猫鼬一样,第一个参数总是errobj。因此,我不必。捕捉错误,只需在回调函数中处理它即可
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);
});
})
})
}
通过回报承诺,你可以把它拴起来
所以你可以做一些像
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) {
return 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) {
return userPassport.setUser(user).then(function () {
return user.updateAttributes({
first_name: profile.name.givenName,
last_name: profile.name.familyName
}).then(function () {
return done(null, user);
});
});
});
}).catch(done);
});
});
}
很酷,所以基本上所有sequelize查询方法都可以返回一个承诺,并且错误将冒泡到最外层。