RXJS 5 bindCallback 当回调是第一个参数时
RXJS 5 bindCallback when the callback is the first argument
我要转换一个函数:
static getCurrentPosition(geo_success, geo_error?, geo_options?)
到可观察的。
如您所见,函数的第一个参数是成功回调。
RxJS 5 bindCallback 适用于成功回调是最后一个参数的函数。
有没有办法使用 bindCallback
static getCurrentPosition(geo_success, geo_error?, geo_options?)
?
如果不是,那么我会手动将函数转换为 Promise
,例如数字 2 here
可以找到有问题的函数here
我想将其实现为可观察对象:
navigator.geolocation.getCurrentPosition(
(position) => {
updateRegion(position)
store.dispatch(getCurrentLocation(position))
},
error => Observable.of(getCurrentPositionRejected(error)),
{ enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
)
我尝试实现以下答案:
class Vepo extends Component {
componentDidMount() {
const { store } = this.context
this.unsubscribe = store.subscribe(() => { })
store.dispatch(fetchCategories())
store.dispatch(getCurrentPosition())
************implementation starts here******************************
const bound = Observable.bindCallback((options, cb) => {
if (typeof options === 'function') {
cb = options
options = null
}
navigator.geolocation.getCurrentPosition(cb, null, options)
})
let x = bound(this.getPosition)
x.subscribe(
function (x) {
console.log('Next: %s', x)
},
function (err) {
console.log('Error: %s', err)
},
function () {
console.log('Completed')
})
x.onNext()
}
getPosition(position) {
console.log(position)
return position
}
而且 console.log()
仅来自内部 getPosition()
使用重新排列的参数创建一个新函数
const bound = Rx.Observable.bindCallback((options, cb) => {
if(typeof options === 'function') {
cb = options
options = null
}
navigator.geolocation.getCurrentPosition(cb, null, options)
})
如果要处理错误,请使用bindNodeCallback
。
我要转换一个函数:
static getCurrentPosition(geo_success, geo_error?, geo_options?)
到可观察的。
如您所见,函数的第一个参数是成功回调。
RxJS 5 bindCallback 适用于成功回调是最后一个参数的函数。
有没有办法使用 bindCallback
static getCurrentPosition(geo_success, geo_error?, geo_options?)
?
如果不是,那么我会手动将函数转换为 Promise
,例如数字 2 here
可以找到有问题的函数here
我想将其实现为可观察对象:
navigator.geolocation.getCurrentPosition(
(position) => {
updateRegion(position)
store.dispatch(getCurrentLocation(position))
},
error => Observable.of(getCurrentPositionRejected(error)),
{ enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 }
)
我尝试实现以下答案:
class Vepo extends Component {
componentDidMount() {
const { store } = this.context
this.unsubscribe = store.subscribe(() => { })
store.dispatch(fetchCategories())
store.dispatch(getCurrentPosition())
************implementation starts here******************************
const bound = Observable.bindCallback((options, cb) => {
if (typeof options === 'function') {
cb = options
options = null
}
navigator.geolocation.getCurrentPosition(cb, null, options)
})
let x = bound(this.getPosition)
x.subscribe(
function (x) {
console.log('Next: %s', x)
},
function (err) {
console.log('Error: %s', err)
},
function () {
console.log('Completed')
})
x.onNext()
}
getPosition(position) {
console.log(position)
return position
}
而且 console.log()
仅来自内部 getPosition()
使用重新排列的参数创建一个新函数
const bound = Rx.Observable.bindCallback((options, cb) => {
if(typeof options === 'function') {
cb = options
options = null
}
navigator.geolocation.getCurrentPosition(cb, null, options)
})
如果要处理错误,请使用bindNodeCallback
。