Promises in Sequelize: how to get results from each promise(Sequelize 中的 Promise:如何从每个 Promise 中获取结果)
问题描述
在 Sequelize >=1.7 我们可以使用承诺
In Sequelize >=1.7 we can use promises
你能解释一下我如何在这段代码中从每个用户那里获取值吗:
Can you explain for me how can i get values from each user in this code:
var User = sequelize.define("user", {
username: Sequelize.STRING
})
User
.sync({ force: true })
.then(function() { return User.create({ username: 'John' }) })
.then(function(john) { return User.create({ username: 'Jane' }) })
.then(function(jane) { return User.create({ username: 'Pete' }) })
.then(function(pete) {
console.log("we just created 3 users :)")
console.log("this is pete:")
console.log(pete.values)
// what i want:
console.log("this is jane:")
console.log(jane.values)
console.log("this is john:")
console.log(john.values)
})
UPD
所有值都需要设置与其他模型的关联.其实我需要一些这样的代码:
All values need for set associations with other Model. Actually i need some like this code:
User.hasMany(Group)
Group.hasMany(User)
User
.sync({ force: true })
.then(function() { return User.create({ username: 'John' }) })
.then(function(john) { return User.create({ username: 'Jane' }) })
.then(function(jane) { return User.create({ username: 'Pete' }) })
.then(function(pete) { return Group.findOrCreate({id: 1}) })
.then(function(group) {return group.setUsers([john, jane, pete])})
.then(function(result) { console.log(result)})
})
推荐答案
Bluebird 方式是 收集帮助函数.
The Bluebird way are the collection helper functions.
如果您想并行创建它们,请使用 map
:
If you want to create them in parallel, use map
:
User.sync({ force: true })
.then(function() {
return Promise.map( ['John', 'Jane', 'Pete'], function(name) {
return User.create({ username: name });
})
}).spread(function(john, jane, pete) {
console.log("we just created 3 users :)")
console.log("this is john:")
console.log(john.values)
console.log("this is jane:")
console.log(jane.values)
console.log("this is pete:")
console.log(pete.values)
})
如果您需要连续创建它们,只需将其更改为 mapSeries
(3.0+).
If you need to create them consecutively, just change it to mapSeries
(3.0+).
如果数组不需要是动态的,并且您只想像示例中那样通过承诺链传递共享值,请查看 如何在 .then() 链中访问之前的承诺结果?.
If the array doesn't need to be dynamic, and you simply want to pass a shared value through the promise chain like in your example, have a look at How do I access previous promise results in a .then() chain?.
这篇关于Sequelize 中的 Promise:如何从每个 Promise 中获取结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Sequelize 中的 Promise:如何从每个 Promise 中获取结果


- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 失败的 Canvas 360 jquery 插件 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Flexslider 箭头未正确显示 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01