'f'
mh-two-thousand-and-two
2024-04-12 26f2711ef9461961fb953e2b497bd314ef95e345
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
let id = 0
const callbacks = {}
 
function warp (fn) {
  return function (options = {}) {
    const callbackId = String(id++)
    callbacks[callbackId] = {
      success: options.success,
      fail: options.fail,
      complete: options.complete
    }
    const data = Object.assign({}, options)
    // TODO 下版重构 nvue h5 callback
    // delete data.success
    // delete data.fail
    // delete data.complete
    const res = fn.bind(this)(data, callbackId)
    if (res) {
      invoke(callbackId, res)
    }
  }
}
 
function invoke (callbackId, res) {
  const callback = callbacks[callbackId] || {}
  delete callbacks[callbackId]
  const errMsg = res.errMsg || ''
  if (new RegExp('\\:\\s*fail').test(errMsg)) {
    callback.fail && callback.fail(res)
  } else {
    callback.success && callback.success(res)
  }
  callback.complete && callback.complete(res)
}
 
export const callback = {
  warp,
  invoke
}