rxjs-wx
Version:
Based on Rx.js for Weixin miniprogram
58 lines (53 loc) • 1.32 kB
JavaScript
import * as Rx from './Rx'
let ob = {
Rx: {},
fromEvent(data, eventName) {
var subject = new Rx.Subject()
data[eventName] = function(event) {
subject.next(event)
}
return subject
}
}
for (let p in Rx) {
ob.Rx[p] = Rx[p]
}
const cbObj2Obs = (obj, fn, returnMethod) => Rx.Observable.create(observe => {
if (typeof obj === 'object' || typeof obj === 'undefined') {
let param = Object.assign({}, obj)
let pro = new Promise((resolve, reject) => {
param.success = (...arg) => {
resolve(...arg)
}
param.fail = (e) => reject(e)
})
let instance = fn.call(null, param) || {}
pro.then(res => {
observe.next(Object.assign(instance, res))
observe.complete()
}, e => {
observe.error(e, instance)
observe.complete()
})
} else {
observe.next(fn.call(null, obj))
}
})
for (let p in wx) {
switch (typeof wx[p]) {
case 'object':
ob[p] = Object.assign(wx[p])
break;
case 'function':
if (/Sync$/.test(p)) {
ob[p] = (...arg) => Rx.Observable.of(wx[p].call(null, ...arg))
} else {
ob[p] = (obj) => cbObj2Obs(obj, wx[p])
}
break;
default:
ob[p] = wx[p]
break;
}
}
module.exports = ob