<p>sequelize目前使用的是promise,多条update语句还是得用promise.all吗?</p>
await在for循环中可以使用😄
for里面的await是串行执行, 并不是并行
多条 update 用 promise.all 包有啥问题么?
@XiaozhongLiu await的串行和并行有什么具体的区别吗?
跟单线程的串行和并行没啥区别吧
我用sequelize的时候没找到多个数据的同时update的方法,sequelize好像是没有的。 自己用的是Transaction加for循环,如果有更好的解决办法,我也想知道。
为什么要循环去update, 代码放出来看看
循环update是什么需求?
Transaction+Promise.all
@XiaozhongLiu 前端有个批量操作,所以需要批量更新数据库
@linliny 我去看看😁
忘说了,我用的数据库是MySQL,好像transaction用不上?
for循环中的await会影响下一次循环,也就是等一个await完成后才会执行下一个 如果需要并发可以使用forEach
阮一峰书里面好像有提到<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
@fruit-memory 这样循环可以继续?<br/><br/><a class=“form” href=“https://github.com/shinygang/Vue-cnodejs”>I‘m webapp-cnodejs-vue</a>
@lzghzr foreach还有这种操作?
@fruit-memory 因为forEach的参数是个函数
使用async关键字的函数实际上返回的是一个Promise对象
综合以上两点的话就不难理解await在for和forEach表现为什么不同了
所以使用forEach的话不是很好控制,await Promise.all()会等所有异步操作完成才会执行下一行代码,forEach则不会
use https://github.com/magicdawn/promise.map
const promise = pmap(array, async (item, index) => { /* blabla */ }, concurrency)
concurrency 就是并发
机制和 async.parallelLimit / bluebird Promise.map 一样的
@lzghzr 懂了
@magicdawn 这个好像跟那个foreach的差不多?每次产生一个新的async函数执行await
用await Promise.all() 或者es2018 的 await for()
@yuu2lee4 es2018?我去看看
transaction和promise.all可以搞定
我都这样写
await Promise.all(_.map(funs, () => new Promise(async (resolve, reject) => {
try{
resolve();
} catch {
reject();
}
})));
@Rukeith 你这是用了lodash?
@fruit-memory 对喔,用 lodash 来 map,用原生的也是可以啦
await Promise.all(tasks.map(function(task){
return new Promise(function(resolve){
// ...
resolve()
})
}))