Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中导入时停止模块初始化_Javascript_Node.js_Slack - Fatal编程技术网

在Javascript中导入时停止模块初始化

在Javascript中导入时停止模块初始化,javascript,node.js,slack,Javascript,Node.js,Slack,我正在处理一个通知包,在如何新建一个函数方面遇到了一些麻烦,而不仅仅是在导入函数时。例如: 我将此作为我的通知功能: const sendNotification=async(选项:SendNotificationTypes)=>{ 常数handleChannel={ slack:async(选项:SlackNotificationTypes)=>{ 等待发送(选项); }, 电子邮件:异步(选项:EmailNotificationTypes)=>{ 等待发送电子邮件(选项); }, 短信:异步

我正在处理一个通知包,在如何新建一个函数方面遇到了一些麻烦,而不仅仅是在导入函数时。例如:

我将此作为我的通知功能:

const sendNotification=async(选项:SendNotificationTypes)=>{
常数handleChannel={
slack:async(选项:SlackNotificationTypes)=>{
等待发送(选项);
},
电子邮件:异步(选项:EmailNotificationTypes)=>{
等待发送电子邮件(选项);
},
短信:异步(选项:短信通知类型)=>{
等待发送短信(选项);
}
};
options.channels.forEach(通道=>{
交换机(通道){
机箱通道_松弛:
handleChannel.slack(选项.slack);
打破
案例频道(电邮:
handleChannel.email(options.email);
打破
案例频道\u短信:
handleChannel.sms(选项.sms);
打破
}
});
};
我的slack通知程序如下所示:


const slack=新的网络客户端(TokenGoesher)
const sendSlack=async(选项:SlackNotificationTypes)=>{
试一试{
等待slack.chat.postMessage({
频道:options.channel,
…(options.message&&{text:options.message}),
…(options.blocks&&{blocks:options.blocks}),
…(options.emoji&&{icon_emoji:options.emoji}),
…(选项、附件和{
附件:options.attachments
})
});
}捕获(错误){
抛出新错误(`Slack notification未能发送:${Error}`);
}
};
所以这很好,但是如果我的环境变量不在适当的位置,代码就会失败(因为我从
process.env
中寻找slack标记)

相反,我希望能够在需要时实例化该函数,并在此时传入slack令牌。理想情况下,如果有一种方法可以避免每次发送通知时都需要一个新实例,那么我希望这样做


我被这个问题困扰了,我想我可能需要重构成一个类?欢迎任何意见

只是懒洋洋地初始化一个实例:

let slack = null; // token not yet available

async function sendSlack(options: SlackNotificationTypes) {
    if (!slack) {
        slack = new WebClient(tokenGoesHere) // hopefully available now
    }
    … // rest of the code using `slack` instance
}

但是,您的环境变量应该在流程启动时就已经存在,或者至少在使用它们的模块加载之前由
dotenv
之类的东西填充。

使用
process.env
的代码在哪里?@Bergi-它应该在
const slack=new-WebClient(process.env.slack\u令牌)中
感谢您的快速响应!因此,如果我这样做,我会将令牌作为一个单独的参数传递(允许人们硬编码令牌或使用env值),这样就不会在每次跨代码的不同部分调用它时创建一个新实例?是的,确切地说,它只会在第一次调用
sendSlack
时被初始化。但实际上,使用环境变量也应该与您的问题中的
const
模式配合使用。太棒了,谢谢。我的强烈偏好是使用环境变量,但我需要提供一个选项,将令牌也作为字符串传递。