【问题标题】:Node-webkit specific javascript callback/promise issuesNode-webkit 特定的 javascript 回调/承诺问题
【发布时间】:2014-08-16 03:26:02
【问题描述】:

最近我一直在编写一个程序来修改一个 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)
  })

【问题讨论】:

    标签: javascript android node.js node-webkit


    【解决方案1】:

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

    【讨论】:

    • 就像我说的我对这部分 javascript 非常陌生,但据我所知,抛出只是错误的自定义,因此如果没有它,则使用默认值,即(来自 w3schools)尝试 { adddler( “欢迎来客!”); } catch(err) { document.getElementById("demo").innerHTML = err.message;这将返回 adddler 未定义
    • 是的,但是你的脚本中有try吗?
    • 不,我没有,我的经验不足将在这里显示,但我以前从未使用过回调(或我在这里的承诺)。此代码是从 ADBKIT 教程中逐行复制的,仅更改了 client.push 变量。我在网上搜索以了解这些功能,但希望获得某种基线工作来构建。我不知道在哪里添加一个 [try] 到这个脚本来尝试让它工作
    • 在您的示例中缺少设备并不是错误,如果您不将这种情况定义为错误,则永远不会如此。您无需添加 try 就足够了,只需通过 trow 错误分配错误案例
    • 好吧,显然我的教育与我想要的结果不符。还有很多要学习的 id 喜欢从验证设备是否连接的方法开始。 var adb = require('adbkit'); var client = adb.createClient(); alert(client.listDevices()) 在我看来,这应该提醒所有连接的设备,如果没有连接设备,我会知道怎么办,但无论如何返回总是 [object Promise] 我不明白为什么npmjs.org/package/adbkit
    猜你喜欢
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2020-01-22
    • 2016-06-15
    • 2019-07-11
    • 2016-07-23
    • 2015-08-13
    • 1970-01-01
    相关资源
    最近更新 更多