javascript - 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 的新手,我不想通过包含不相关的细节来过度复杂化这个问题。如果您能给我提示我缺少什么以及如何调试它,我可以提供所有相关的详细信息。
解决方案
感谢有用的评论,我能够将其范围缩小到库的编译。事实上,我并没有使用预编译的二进制文件,而是必须自己使用电子重建来编译库以使蓝牙适配器工作。我做了以下测试:
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!
当然这只是部分答案,因为我仍然不知道为什么它在我的机器上编译不同,但至少我知道从哪里开始寻找问题。
推荐阅读
- google-api - 用于服务帐户的 Google Drive Api。创建文件时出错
- android - 如果互联网不可用,为什么 Retrofit 等到超时才给 onFailure 回调?
- javascript - 如何在 javascript 中迭代数组对象?
- azure - 无法将 PFX 添加到 Azure Key Vault
- azure - 如何在 Azure 门户中从我的 Linux VM 获取指标
- confluence - 迁移到 Confluence - 在 Confluence 中更新作者字段和创建或修改的字段
- javascript - 性能比较:Array of Array vs Array of Object
- sql - 如何使用行号对这个 BigQuery 查询进行分页?
- python - 使用 VS Code Python 扩展登录到受密码保护的远程 Jupyter URI(URI 中没有令牌)
- macos - kubernetes 命令在终端上工作但没有 iTerm2