当我调用“scanner.connect()”方法时,我正在尝试使用以下代码更新属性:
class Scanner
ready: false
connect: () =>
cordova.exec (status) =>
console.log status
if status is 'connected'
@ready = true
console.log @ready
,
(error) ->
console.log error
,
"LineaProScanner", "ready", []
scan: () ->
console.log 'start scan...'
stop: () ->
console.log 'stopping scan...'
然后当我访问scanner.ready属性时,它总是显示为false。
scanner = new Scanner()
scanner.connect()
console.log scanner.ready // always shows false
我刚开始使用CoffeeScript,所以我知道我做错了什么哈哈但是我不确定是什么。
谢谢!
答案 0 :(得分:1)
你的coffeescript看起来很好,它的执行顺序应该归咎于这个问题,这个问题也让那些普通的JS程序员惹恼了。
我打赌cordova.exec()
是异步的,所以你在它回电之前询问它是否准备好并准备就绪。
试试看我是否正确:
scanner = new Scanner()
scanner.connect()
setTimeout (-> console.log scanner.ready), 1000
只要扫描仪在不到一秒的时间内准备就绪,就应该记录true
。但这不是你应该如何构造这个代码。
正确的方法是代替这个setTimeout
而不是你想要自己的回调。
class Scanner
ready: false
# Accept a callback argument on the connect method.
connect: (onReady) =>
cordova.exec (status) =>
console.log status
if status is 'connected'
@ready = true
console.log @ready
# call the onReady callback if it was passed in
onReady?()
,
(error) ->
console.log error
,
"LineaProScanner", "ready", []
现在你可以做到:
scanner = new Scanner()
scanner.connect ->
console.log scanner.ready # should log `true`
答案 1 :(得分:0)
您可以简化此行的=>
:
connect: (onReady) ->
类方法可以直接访问类变量。但是方法中的函数没有。