gpt4 book ai didi

node.js - is-port-reachable 使用 promises 在循环中获取结果

转载 作者:搜寻专家 更新时间:2023-10-31 23:50:32 25 4
gpt4 key购买 nike

我正在使用返回 promise 的 is-port-reachable 包。我想找到第一个空闲(无法访问)端口。所以我应该在循环中执行 IsPortReachable。我正在尝试使用 yield,但出现错误 SyntaxError: Unexpected strict mode reserved word (yield couldBeBinded)。如果我将 yield 移到 promise 之外,错误就会消失。

findPort () {
function * checkPort() {
let couldBeBinded = false;

let port = this.port;

do {
IsPortReachable(this.port, {host: 'localhost'})
.then(function (reachable) {
"use strict";

if (!reachable) { // not binded
couldBeBinded = true;
} else {
port++;
}

if (port > 65534) {
return couldBeBinded;
}

yield couldBeBinded;
});
} while(!couldBeBinded && (port < 65534));
}

var generator = checkPort();
let couldBeBinded = { value: false, done: false };
while((couldBeBinded.value !== true) && (couldBeBinded.done !== false)) {
couldBeBinded = generator.next();
console.log(couldBeBinded);
}
}

可能是我的代码完全错误,所以请告诉我如何在 node 上循环 promise 。谢谢

最佳答案

这是我对这个问题的解决方案:

const IsPortReachable = require('is-port-reachable');

var options = {
start_port : 2994,
end_port : 3003,
findFirstFree : true
}

function CheckPort(port, firstFree, callback) {
IsPortReachable(port, {host: 'localhost'})
.then((reachable) => {
if (reachable) {
console.log(port, "reachable");
if (firstFree) callback(port);
}
else {
console.log(port, "free")
if (!firstFree) callback(port);
}
})
}

function CheckPortHandler(port, firstFree) {
if (port >= options.end_port) return;
CheckPort(port + 1, firstFree, CheckPortHandler)
}

CheckPort(options.start_port, options.findFirstFree, CheckPortHandler);

您可以在选项中更改开始和结束端口。如果您想找到第一个可达端口(而不是第一个空闲端口),请将 findFirstFree 更改为 false

在代码中,我创建了一个函数 CheckPort,它环绕 IsPortReachable 但也接收回调。如果 reachable 状态与 firstFree 参数不一致,则调用回调。回调是另一个函数,它使用递增的端口再次调用 CheckPort,因此该过程会继续。它一直持续到 reachable 状态与 firstFree 参数一致,因此不再调用回调。

这可能有点令人困惑,但对我来说没问题。

这是 findFirstFree : true 的输出

2994 'free'

findFirstFree : false 的输出

2994 'free'
2995 'free'
2996 'free'
2997 'free'
2998 'free'
2999 'free'
3000 'reachable'

关于node.js - is-port-reachable 使用 promises 在循环中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51945945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com