-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAsyncFunctionChain.js
More file actions
47 lines (40 loc) · 913 Bytes
/
AsyncFunctionChain.js
File metadata and controls
47 lines (40 loc) · 913 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
const Q = require('q')
async function foo (a, cb) {
for (let i of a) {
console.log('foo: ', i)
await cb(i)
}
}
async function bar (b) {
console.log('bar: ', b)
return Promise.then(() => {
return setTimeout((b) => {
return b + 1
}, 1000)
})
}
// async function main () {
// console.log(z)
// await foo(z, bar).then(() => { console.log('end main') })
// }
function chainPromise (array, callback) {
let cb = current => {
return prev => callback(current, prev)
}
return array.reduce((chain, obj) => chain.then(cb(obj)), Q.when(1))
}
async function processArray (array, fn) {
let results = []
for (let i = 0; i < array.length; i++) {
let r = await fn(array[i])
results.push(r)
}
return results // will be resolved value of promise
}
let z = []
for (let k = 0; k < 10; k++) {
z.push(k)
}
// processArray(z, bar)
// foo(z, bar)
chainPromise(z, bar)