node.js - 使用 ssh2 访问多个服务器的 for 循环中的 async/await 不起作用
问题描述
我有这个工具,可以使用 npm 库ssh2访问多个服务器。我想遍历所有这些服务器以自动更改所有这些服务器中的某个文件。这是我到目前为止所做的代码片段。
const c = require('./constants');
const Client = ssh2.Client;
const conn1 = new Client();
const conn2 = new Client();
const conn3 = new Client();
const serverTuple = [
[conn1, c.SERVER_1],
[conn2, c.SERVER_2],
[conn3, c.SERVER_3]
]
(async () => {
try {
serversTuple.forEach(
async value => await accessServers(value[0], value[1])
);
} catch (err) {
console.log(err);
}
})
我的问题是这样的:
当我启动我的程序时,它直接进入 SERVER_3 而没有实际处理 SERVER_1 和 SERVER_2。有没有一种方法可以在执行下一个服务器之前等待一个服务器首先完成?
解决方案
您应该使用for
循环而不是forEach
,因为在调用数组中的下一项之前forEach
实际上并没有这样做。await
(async () => {
try {
for(let value of serversTuple){
await accessServers(value[0], value[1])
}
} catch (err) {
console.log(err);
}
})
推荐阅读
- logging - 重新触发从 Kafka 队列读取的 AWS Lambda 函数
- firebase - 在 Flutter 中从 Firebase 加载图像时使用 CircularProgressIndicator 小部件
- firebase - 如何在 FLUTTER 中杀死应用程序时将位置数据发送到 Firestore 数据库
- spring-boot - 多个微服务及其通信
- bazel - 如何获取在 Bazel 的 execpath 中创建的文件的文件对象?
- sql-server-2016 - WebSphere 应用程序 (V 8.5.5.0) 到 SQL Server 2016 数据库连接错误
- sql - Concat 然后在 Hive 中分组
- c# - 如何将变量数据从控制器传递到视图(MVC)
- javascript - 如果Server以text/html类型响应,Client会识别不出来吗?
- flutter - 如何获取待处理通知的[scheduledDate](颤动本地通知)