;(async () => { // 模拟一个异步请求,接受参数并返回它,然后等待指定的时间 asyncfunctionget(ms) { awaitwait(ms) return ms } const fn = mergeMap(get) let last = 0 let sum = 0 awaitPromise.all([ fn(30).then((res) => { last = res sum += res }), fn(20).then((res) => { last = res sum += res }), fn(10).then((res) => { last = res sum += res }), ]) console.log(last) // 实际上确实执行了 3 次,结果也确实为 3 次调用参数之和 console.log(sum) })()
;(async () => { // 模拟一个异步请求,接受参数并返回它,然后等待指定的时间 asyncfunctionget(ms) { awaitwait(ms) return ms } const fn = switchMap(get) let last = 0 let sum = 0 awaitPromise.all([ fn(30).then((res) => { last = res sum += res }), fn(20).then((res) => { last = res sum += res }), fn(10).then((res) => { last = res sum += res }), ]) console.log(last) // 实际上确实执行了 3 次,然而结果并不是 3 次调用参数之和,因为前两次的结果均被抛弃,实际上返回了最后一次发送请求的结果 console.log(sum) })()
;(async () => { // 模拟一个异步请求,接受参数并返回它,然后等待指定的时间 asyncfunctionget(ms) { awaitwait(ms) return ms } const fn = concatMap(get) let last = 0 let sum = 0 awaitPromise.all([ fn(30).then((res) => { last = res sum += res }), fn(20).then((res) => { last = res sum += res }), fn(10).then((res) => { last = res sum += res }), ]) console.log(last) // 实际上确实执行了 3 次,然而结果并不是 3 次调用参数之和,因为前两次的结果均被抛弃,实际上返回了最后一次发送请求的结果 console.log(sum) })()
;(async () => { // 模拟一个异步请求,接受参数并返回它,然后等待指定的时间 asyncfunctionget(ms) { awaitwait(ms) return ms } const time = 100 const fn = asyncTimeout(time, throttle(time, get)) let last = 0 let sum = 0 awaitPromise.all([ fn(30).then((res) => { last = res sum += res }), fn(20).then((res) => { last = res sum += res }), fn(10).then((res) => { last = res sum += res }), ]) // last 结果为 10,和 switchMap 的不同点在于会保留最小间隔期间的第一次,而抛弃掉后面的异步结果,和 switchMap 正好相反! console.log(last) // 实际上确实执行了 3 次,结果也确实为第一次次调用参数的 3 倍 console.log(sum) })()