1
chairuosen 2021-03-12 17:13:35 +08:00
for 里可以 await,for 结束后直接 resolve,当然,上下文得在 async 里
|
2
QGabriel OP @chairuosen 现在不就是 for 里 await 吗
|
3
chairuosen 2021-03-12 17:35:24 +08:00
@QGabriel #2 不是,套了一个普通 function,一个 setTimeout 啊
|
4
QGabriel OP @chairuosen 没懂你什么意思
|
5
yunyuyuan 2021-03-12 17:49:10 +08:00
```javascript
const arr = [] const reqList = [] // just for test async function sleep (sec){ return new Promise(resolve => { setTimeout(()=>{ resolve() }, sec) }) } async function foo() { return new Promise(async (resolve, reject) => { for(let i=0; i< 5; i++){ (function (i) { reqList.push(new Promise(resolve1 => { const func = async ()=> { let a = await sleep(5) arr.push(a) console.log(`${i} ok`) resolve1() } setTimeout(func, 1000 * i ) })) })(i) } Promise.all(reqList).then(()=>{ console.log('all ok') resolve() }) }) } foo().then(res=> { }) ``` |
6
yunyuyuan 2021-03-12 17:49:51 +08:00
没缩进是真的难受
|
7
beginor 2021-03-12 18:37:43 +08:00 via Android
没缩进看着不难受么?
|
8
wednesdayco 2021-03-12 19:09:47 +08:00
这不是标准面试题里面的 EventLoop 问题么
|
9
leelz 2021-03-13 08:25:25 +08:00
都 let 了 还用什么 iife
|
10
ljpCN 2021-03-13 16:43:17 +08:00
一分钟调 20 次,是指每调得等 3 秒,还是单纯的 60 秒内不超过 20 就行?如果是后者,那么周期是从哪里开始算呢?比如,第一分钟的最后一秒连续调了 20 次,第二分钟的第一秒连续调了 20 次,但只看这两秒的话,两秒钟就有了 40 次,这种情况符合你说的一分钟 20 次吗?
|
11
ljpCN 2021-03-13 16:55:19 +08:00
没有时间限制的版本(其实用 Promise.all 让它并发就行,但这里为了写法一致就写成了同步):
https://imgtu.com/i/6djJ0g 三秒钟只能请求一次(搞一个 setTimeout 一起让 Promise.all 等,两者必须都 resolve 一次循环才结束): https://imgtu.com/i/6djGnS |
13
ljpCN 2021-03-13 17:01:59 +08:00
|