首页 > 解决方案 > Javascript 承诺永远不会解决

问题描述

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

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

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

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),但是它如何在库中编译呢?我误解了承诺吗?打字稿中的一些功能?库中的错误?我是 JavaScript 的新手,我不想通过包含不相关的细节来过度复杂化这个问题。如果您能给我提示我缺少什么以及如何调试它,我可以提供所有相关的详细信息。

标签: javascripttypescriptecmascript-6

解决方案


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

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");});

});

并获得预期的输出:

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!

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


推荐阅读