繁体   English   中英

Javascript promise 从不解决

[英]Javascript promise never resolves

我在 typescript 项目中使用名为 node- poweredup的库中的 rotateByDegrees:

motor.rotateByDegrees(20,10).then(function(value) {console.log("test");}, function(value) {console.log("error");});

我希望在成功完成后看到“测试”,但 promise 永远不会解决。 如果我使用等待,它会永远挂在等待线上。 复制似乎在 rotateByDegrees function 中使用的语法:

let promise = new Promise((resolve) => { return resolve(); });

无法编译,我收到error TS2794: Expected 1 arguments, but got 0. Did you forget to include 'void' in your type argument to 'Promise'? 我可以使用resolve(true)使其编译并按预期运行,但是它如何在库中编译呢? 我误解了承诺吗? typescript 中的某些功能? 库中的错误? 我是 JavaScript 的新手,我不想通过包含不相关的细节来过度复杂化这个问题。 如果您能给我提示我缺少什么以及如何调试它,我可以提供所有相关的详细信息。

感谢有用的评论,我能够将其范围缩小到库的编译。 事实上,我并没有使用预编译的二进制文件,而是必须自己使用电子重建来编译库以使蓝牙适配器工作。 我做了以下测试:

git clone https://github.com/nathankellenicki/node-poweredup.git
cd node-poweredup
npm install
npm run build

这编译没有错误。 我创建了以下测试文件

const PoweredUP = require("node-poweredup");

const poweredUP = new PoweredUP.PoweredUP();
poweredUP.scan(); // Start scanning for hubs

console.log("Looking for Hubs...");

poweredUP.on("discover", async (hub) => { // Wait to discover hubs

    await hub.connect(); // Connect to hub
    console.log(`Connected to ${hub.name}!`);

    const motorA = await hub.waitForDeviceAtPort("A"); // Make sure a motor is plugged into port A
    motorA.rotateByDegrees(20,10).then(function(value) {console.log("test");});

});

并获得预期的 output:

node-poweredup$ node test.js 
Looking for Hubs...
Connected to MyHub2!
test
Connected to MyHub3!
test

当我将第一行更改为

const PoweredUP = require(".");

让它使用我自己编译的二进制文件

node-poweredup$ node test.js 
Looking for Hubs...
Connected to MyHub2!
Connected to MyHub3!

当然这只是部分答案,因为我仍然不知道为什么它在我的机器上编译不同,但至少我知道从哪里开始寻找问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM