gpt4 book ai didi

javascript - 全局变量在 forEach 循环体内显示为 "unexpected identifier"

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

我有一些我正在尝试重构的 Javascript 代码。给我带来问题的变量是 Server 变量,它是我创建的自定义模块。出于某种原因,当解释器尝试计算 forEach 循环的第一行时,Server 变量作为“未识别的标识符”返回。这是不起作用的新重构代码:

'use strict';

const Config = require('config');

const Server = require('./server');

let servers = [];

async function start() {
const services = Config.get('app.services');

try {
services.forEach(service => {
// An error is returned with this next line saying Server is an "unidentified identifier"
let server = await Server.deployment(service.host, service.port);
await server.start();
servers.push(server);
});
} catch (err) {
console.log('an error has been caught');
console.log(err);
process.exit(1);
}

servers.forEach(server => {
console.log(`Server running at ${server.info.uri}`);
});
};

这是我之前使用的代码:

async function start() {
try {
// Server works as anticipated here.
const server = await Server.deployment(Config.get('app.host'), Config.get('app.port'));
await server.start();
servers.push(server);

const server2 = await Server.deployment(Config.get('app.host'), 3031);
await server2.start();
servers.push(server2);

} catch (err) {
console.log('an error has been caught');
console.log(err);
process.exit(1);
}

servers.forEach(server => {
console.log(`Server running at ${server.info.uri}`);
});
};

正如您在这里看到的,我想将我的服务器配置移动到元数据文件,然后只需使用 forEach 循环来创建我需要的服务器部署。

谁能解释为什么会失败,并提供有关如何有效编码的任何提示?

编辑 1:为清楚起见添加确切的错误消息。

let server = await Server.deployment(service.host, service.port); 
^^^^^^ SyntaxError: Unexpected identifier

最佳答案

您只能在 async 函数中使用 await - 您的 forEach 回调目前不是 async ,因此当您尝试在内部使用 await 时会抛出错误。但是简单地将 forEach 回调更改为异步可能不会执行您想要的操作 - 相反,map 每个 service 初始化为 Promise 并在 promise 数组上调用 Promise.all。也不需要全局 servers 变量:

async function start() {
const services = Config.get('app.services');
try {
const serverPromises = services.map(async (service) => {
const server = await Server.deployment(service.host, service.port);
await server.start();
return server;
});
const servers = await Promise.all(serverPromises);
servers.forEach(server => {
console.log(`Server running at ${server.info.uri}`);
});
} catch (err) {
console.log('an error has been caught');
console.log(err);
process.exit(1);
}
}

关于javascript - 全局变量在 forEach 循环体内显示为 "unexpected identifier",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51127971/

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