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

Node-webkit specific javascript callback/promise issues

本文关键字:回调 承诺 问题 javascript Node-webkit      更新时间:2023-09-26

最近我一直在写一个修改android设备的程序,并在node-webkit上运行。我现在有一个漂亮的GUI,并想实现adbkit,使工具将是平台独立的。

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

问题是,即使没有设备连接,我得到一个成功的返回'完成推…而不是"出了问题"。我试着测试客户端。listDevices并得到相同的问题:无论设备是否实际连接,返回正。

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

这是我的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)
  })

要触发catch,你需要throw一些东西。所以如果你想在没有设备的情况下得到错误,你应该添加if (devices.length <= 0) throw new Error('error description')