在这里,我使用全局变量usergb,因为在获得购物车的“ then”块中,我无法再访问该用户。如何通过购物车传递用户,而不必创建全局usergb?
var usergb;
sequelize
.sync()
.then(result => {
return User.findByPk(1);
})
.then(user => {
if (!user) {
return User.create({ name: 'Max', email: 'test@test.com' });
}
return user;
})
.then(user => {
usergb = user;
return user.getCart();
})
.then(cart => { // here I lost the reference to user
if (!cart) {
return usergb.createCart();
}
return cart
})
.then(cart => {
app.listen(3000);
})
.catch(err => {
console.log(err);
});
答案 0 :(得分:0)
返回包含Promise.all
和user
调用的数组的createCart()
,您将在下一个.then
中访问这两者:
sequelize
.sync()
.then(result => {
return User.findByPk(1);
})
.then(user => {
if (!user) {
return User.create({ name: 'Max', email: 'test@test.com' });
}
return user;
})
.then(user => {
return Promise.all([user, user.getCart()]);
// ^^^^^^^^^^^^^^^^^^^^^^^^
})
.then(([user, cart]) => {
// ^^^^^^^^^^^^^^^^^^^^^^^^
if (!cart) {
return user.createCart();
}
return cart
})
.then(cart => {
app.listen(3000);
})
.catch(err => {
console.log(err);
});
您可以考虑使用async
/ await
来提高代码的可读性:
try {
const result = await sequelize.sync();
const user = await User.findByPk(1) || await User.create({ name: 'Max', email: 'test@test.com' });
const cart = await user.getCart() || await user.createCart();
app.listen(3000);
} catch (err) {
console.log(err);
}
答案 1 :(得分:0)
嵌套您需要引用user
的promise。
sequelize
.sync()
.then(result => {
return User.findByPk(1);
})
.then(user => {
if (!user) {
return User.create({ name: "Max", email: "test@test.com" });
}
return user;
})
.then(user => {
return (
user
.getCart()
// Nest the next promise here
.then(cart => {
if (!cart) {
return usergb.createCart();
}
return cart;
})
);
})
.then(cart => {
app.listen(3000);
})
.catch(err => {
console.log(err);
});