跳到主要内容
CNode

使用async如何进行并发处理?

问答
Ffruit-memory发布于 9 年前最后回复 9 年前
2784410

sequelize目前使用的是promise,多条update语句还是得用promise.all吗?

查看回复

回复 (27)

R
Rukeith#279 年前
引用 fruit-memory@Rukeith 你这是用了lodash?

@fruit-memory 对喔,用 lodash 来 map,用原生的也是可以啦

R
Rukeith#259 年前

我都这样写

await Promise.all(_.map(funs, () => new Promise(async (resolve, reject) => {
	try{
		resolve();
	} catch {
		reject();
	}
})));
Y
yessirpopesama#249 年前

transaction和promise.all可以搞定

F
fruit-memory#239 年前
Y
yuu2lee4#229 年前

用await Promise.all() 或者es2018 的 await for()

M
magicdawn#219 年前
引用 fruit-memory@magicdawn 这个好像跟那个foreach的差不多?每次产生一个新的async函数执行await

@fruit-memory

  • forEach 实现不了 await
  • for 循环 + await 并发为 1
  • Promise.all + array.map 并发为 Infinity

F
fruit-memory#209 年前
引用 magicdawnuse https://github.com/magicdawn/promise.map concurrency 就是并发 机制和 async.parallelLimit / bluebird...

@magicdawn 这个好像跟那个foreach的差不多?每次产生一个新的async函数执行await

M
magicdawn#189 年前

use https://github.com/magicdawn/promise.map

const promise = pmap(array, async (item, index) => { /* blabla */ }, concurrency)

concurrency 就是并发

机制和 async.parallelLimit / bluebird Promise.map 一样的

L
lzghzr#179 年前
引用 fruit-memory@lzghzr foreach还有这种操作?

@fruit-memory 因为forEach的参数是个函数

使用async关键字的函数实际上返回的是一个Promise对象

综合以上两点的话就不难理解await在for和forEach表现为什么不同了

所以使用forEach的话不是很好控制,await Promise.all()会等所有异步操作完成才会执行下一行代码,forEach则不会

L
leijuns#159 年前
L
leijuns#149 年前

阮一峰书里面好像有提到

I‘m webapp-cnodejs-vue

L
lzghzr#139 年前

for循环中的await会影响下一次循环,也就是等一个await完成后才会执行下一个 如果需要并发可以使用forEach

F
fruit-memory#129 年前

忘说了,我用的数据库是MySQL,好像transaction用不上?

F
fruit-memory#109 年前
引用 xiaozhongliu为什么要循环去update, 代码放出来看看

@XiaozhongLiu 前端有个批量操作,所以需要批量更新数据库

Z
zubincheung#99 年前

Transaction+Promise.all

J
jiyarong#89 年前

循环update是什么需求?

X
xiaozhongliu#79 年前

为什么要循环去update, 代码放出来看看

L
linliny#69 年前

我用sequelize的时候没找到多个数据的同时update的方法,sequelize好像是没有的。 自己用的是Transaction加for循环,如果有更好的解决办法,我也想知道。

F
fruit-memory#59 年前

跟单线程的串行和并行没啥区别吧

F
fruit-memory#49 年前
引用 xiaozhongliufor里面的await是串行执行, 并不是并行

@XiaozhongLiu await的串行和并行有什么具体的区别吗?

R
rrbe#39 年前

多条 update 用 promise.all 包有啥问题么?

X
xiaozhongliu#29 年前

for里面的await是串行执行, 并不是并行

F
fruit-memory#19 年前

await在for循环中可以使用😄

参与回复

登录后即可参与回复。登录