Skip to content

Commit

Permalink
fix(weapp): 修复小程序 request 并发没有限制的问题,close #5213
Browse files Browse the repository at this point in the history
  • Loading branch information
Chen-jj committed Jan 6, 2020
1 parent 1ce8c48 commit a4e8a38
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 84 deletions.
31 changes: 17 additions & 14 deletions packages/taro-alipay/src/native-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,27 +166,30 @@ const nativeRequest = my.canIUse('request') ? my.request : my.httpRequest
const RequestQueue = {
MAX_REQUEST: 5,
queue: [],
request (options) {
this.push(options)
// 返回request task
return this.run()
},
pendingQueue: [],

push (options) {
request (options) {
this.queue.push(options)
return this.run()
},

run () {
if (!this.queue.length) {
return
}
if (this.queue.length <= this.MAX_REQUEST) {
let options = this.queue.shift()
let completeFn = options.complete
options.complete = () => {
completeFn && completeFn.apply(options, [...arguments])
if (!this.queue.length) return

while (this.pendingQueue.length < this.MAX_REQUEST) {
const options = this.queue.shift()
const { successFn, failFn } = options
options.success = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
successFn && successFn.apply(options, args)
}
options.fail = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
failFn && failFn.apply(options, args)
}
this.pendingQueue.push(options)
return nativeRequest(options)
}
}
Expand Down
31 changes: 17 additions & 14 deletions packages/taro-jd/src/native-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,30 @@ import { queryToJson, getUniqueKey } from './util'
const RequestQueue = {
MAX_REQUEST: 5,
queue: [],
request (options) {
this.push(options)
// 返回request task
return this.run()
},
pendingQueue: [],

push (options) {
request (options) {
this.queue.push(options)
return this.run()
},

run () {
if (!this.queue.length) {
return
}
if (this.queue.length <= this.MAX_REQUEST) {
let options = this.queue.shift()
let completeFn = options.complete
options.complete = (...args) => {
completeFn && completeFn.apply(options, args)
if (!this.queue.length) return

while (this.pendingQueue.length < this.MAX_REQUEST) {
const options = this.queue.shift()
const { successFn, failFn } = options
options.success = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
successFn && successFn.apply(options, args)
}
options.fail = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
failFn && failFn.apply(options, args)
}
this.pendingQueue.push(options)
return jd.request(options)
}
}
Expand Down
31 changes: 17 additions & 14 deletions packages/taro-qq/src/native-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,30 @@ import { queryToJson, getUniqueKey } from './util'
const RequestQueue = {
MAX_REQUEST: 5,
queue: [],
request (options) {
this.push(options)
// 返回request task
return this.run()
},
pendingQueue: [],

push (options) {
request (options) {
this.queue.push(options)
return this.run()
},

run () {
if (!this.queue.length) {
return
}
if (this.queue.length <= this.MAX_REQUEST) {
let options = this.queue.shift()
let completeFn = options.complete
options.complete = (...args) => {
completeFn && completeFn.apply(options, args)
if (!this.queue.length) return

while (this.pendingQueue.length < this.MAX_REQUEST) {
const options = this.queue.shift()
const { successFn, failFn } = options
options.success = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
successFn && successFn.apply(options, args)
}
options.fail = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
failFn && failFn.apply(options, args)
}
this.pendingQueue.push(options)
return qq.request(options)
}
}
Expand Down
31 changes: 17 additions & 14 deletions packages/taro-swan/src/native-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,30 @@ import {
const RequestQueue = {
MAX_REQUEST: 5,
queue: [],
request (options) {
this.push(options)
// 返回request task
return this.run()
},
pendingQueue: [],

push (options) {
request (options) {
this.queue.push(options)
return this.run()
},

run () {
if (!this.queue.length) {
return
}
if (this.queue.length <= this.MAX_REQUEST) {
let options = this.queue.shift()
let completeFn = options.complete
options.complete = () => {
completeFn && completeFn.apply(options, [...arguments])
if (!this.queue.length) return

while (this.pendingQueue.length < this.MAX_REQUEST) {
const options = this.queue.shift()
const { successFn, failFn } = options
options.success = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
successFn && successFn.apply(options, args)
}
options.fail = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
failFn && failFn.apply(options, args)
}
this.pendingQueue.push(options)
return swan.request(options)
}
}
Expand Down
31 changes: 17 additions & 14 deletions packages/taro-tt/src/native-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,30 @@ import { queryToJson, getUniqueKey } from './util'
const RequestQueue = {
MAX_REQUEST: 5,
queue: [],
request (options) {
this.push(options)
// 返回request task
return this.run()
},
pendingQueue: [],

push (options) {
request (options) {
this.queue.push(options)
return this.run()
},

run () {
if (!this.queue.length) {
return
}
if (this.queue.length <= this.MAX_REQUEST) {
let options = this.queue.shift()
let completeFn = options.complete
options.complete = () => {
completeFn && completeFn.apply(options, [...arguments])
if (!this.queue.length) return

while (this.pendingQueue.length < this.MAX_REQUEST) {
const options = this.queue.shift()
const { successFn, failFn } = options
options.success = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
successFn && successFn.apply(options, args)
}
options.fail = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
failFn && failFn.apply(options, args)
}
this.pendingQueue.push(options)
return tt.request(options)
}
}
Expand Down
31 changes: 17 additions & 14 deletions packages/taro-weapp/src/native-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,30 @@ import { queryToJson, getUniqueKey } from './util'
const RequestQueue = {
MAX_REQUEST: 5,
queue: [],
request (options) {
this.push(options)
// 返回request task
return this.run()
},
pendingQueue: [],

push (options) {
request (options) {
this.queue.push(options)
return this.run()
},

run () {
if (!this.queue.length) {
return
}
if (this.queue.length <= this.MAX_REQUEST) {
let options = this.queue.shift()
let completeFn = options.complete
options.complete = (...args) => {
completeFn && completeFn.apply(options, args)
if (!this.queue.length) return

while (this.pendingQueue.length < this.MAX_REQUEST) {
const options = this.queue.shift()
const { successFn, failFn } = options
options.success = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
successFn && successFn.apply(options, args)
}
options.fail = (...args) => {
this.pendingQueue = this.pendingQueue.filter(item => item !== options)
this.run()
failFn && failFn.apply(options, args)
}
this.pendingQueue.push(options)
return wx.request(options)
}
}
Expand Down

0 comments on commit a4e8a38

Please sign in to comment.