Node-webkit特定的javascript回调/承诺问题

时间:2014-08-16 03:26:03

标签: javascript android node.js node-webkit

最近我一直在编写一个程序来修改一个Android设备并运行node-webkit。我现在有一个漂亮的GUI,想要实现adbkit,这样工具就可以独立于平台了。

我已将adbkit和bluebird模块安装到node-modules /并且据我所知,一切都应该正常工作(我对回调和承诺的想法非常新)

问题在于,即使没有连接设备,我也会获得成功返回“完成推送......”而不是“出错”。香港专业教育学院尝试过测试client.listDevices并得到同样的问题:无论设备是否实际连接,都会返回正值。

如果有人有节点ADBKIT或JS Promises的经验,我将非常感谢一些指导。

这是我的JS代码:

var Promise = require('bluebird')
var adb = require('adbkit')
var client = adb.createClient()

client.listDevices()
  .then(function(devices) {
    return Promise.map(devices, function(device) {
      return client.push(device.id, 'test.txt', '/data/local/tmp/foo.txt')
        .then(function(transfer) {
          return new Promise(function(resolve, reject) {
            transfer.on('progress', function(stats) {
              console.log('[%s] Pushed %d bytes so far',
                device.id,
                stats.bytesTransferred)
            })
            transfer.on('end', function() {
              console.log('[%s] Push complete', device.id)
              resolve()
            })
            transfer.on('error', reject)
          })
        })
    })
  })
  .then(function() {
    alert('Done pushing test.txt to all connected devices')
  })
  .catch(function(err) {
    alert('Something went wrong:', err.stack)
  })

1 个答案:

答案 0 :(得分:0)

要触发catch,您需要throw。因此,如果您希望在任何设备上都出错,则应添加if (devices.length <= 0) throw new Error('error description')