当前位置: 首页 > web >正文

巧用promise.race实现nrm镜像源切换----nbsl

今天是母亲节祝全天的母亲节日快乐奥

在这里插入图片描述

引言

在复习Promise知识点时,发现Promise.race在实际开发中应用较少,于是深入思考了它的应用场景。最近使用nrm(npm镜像源切换工具)时,想到每次都需要手动切换镜像源来测试哪个更稳定。这引发了一个想法:是否可以通过一行命令,让系统自动选择最优的镜像源?这与Promise.race的设计初衷不谋而合。说干就干,具体代码如下:

如何使用

  1. 安装
npm i -g nbsl
  1. 使用
nbsl
  1. 效果
    在这里插入图片描述

实现代码

#! /usr/bin/env node
const { execSync } = require('child_process')
const axios = require('axios')// 获取有效镜像源(处理403问题)
function getValidSources () {try {const output = execSync('nrm ls').toString()let sources = output.split('\n').filter(source => source.trim())return sources.map(item => {// 去除首尾空格并按连续的横杠分割const [namePart, urlPart] = item.trim().split(/\s*[-]{2,}\s*/)return {name: namePart,url: urlPart}})} catch (error) {throw new Error('请先安装nrm: npm install -g nrm')}
}// 主流程
async function switchFastest () {let sources = getValidSources()console.log('待测速源:', sources)let promiseArr = []sources.forEach(source => {promiseArr.push(axios.get(source.url, { timeout: 5000 }))})const fastest = await Promise.race(promiseArr)console.log('最快的url:', fastest.config.url)let fastestSource = sources.find(source => source.url === fastest.config.url)execSync(`nrm use ${fastestSource.name}`, { stdio: 'inherit' })console.log(`已切换至最快源 ${fastestSource.name}: ${fastestSource.url}`)
}switchFastest()

结束

过几天准备写个灭霸指令:一行命令删除一半文件

http://www.xdnf.cn/news/5484.html

相关文章:

  • 冒泡排序的原理
  • 数据指标和数据标签
  • 「银河通用」创始人王鹤:人形机器人跳舞是预先编程,马拉松是遥控操作!
  • C语言文件读写函数详解与示例(fread、fgets、fgetc、fscanf、fwrite、fputs 和 fputc比较)
  • 专业课复习笔记 5
  • 可视化赋能电子围栏:开启智能安防新视界
  • 9.1.领域驱动设计
  • 大模型应用中常说的Rerank是什么技术?
  • 第26节:卷积神经网络(CNN)-数据增强技术(PyTorch)
  • URP - 能量罩实现
  • Scala 中累加器的创建与使用格式详解
  • 【面板数据】省级农业及农村现代化指标数据(2011-2022年)
  • C++初阶-string类的增删的模拟实现
  • C# 通过ConfigurationManager读写配置文件App.Config
  • 如何实现并运用责任链模式
  • 英语时态--中英文对“时间”的不同理解
  • 抽奖系统-基本-注册
  • Redis从基础到高阶应用:核心命令解析与延迟队列、事务消息实战设计
  • JVM 监控
  • 【Java学习笔记】多态
  • HTML5中的Microdata与历史记录管理详解
  • 安装typescript时,npm install -g typescript报错
  • .Net HttpClient 处理响应数据
  • 每日一题洛谷P8615 [蓝桥杯 2014 国 C] 拼接平方数c++
  • 被一个人影响情绪是爱吗?这 3 个真相越早明白越好
  • AI面经总结-试读
  • 深度解析六大AI爬虫工具:crawl4ai、FireCrawl、Scrapegraph-ai、Jina、SearXNG、Tavily技术对比与实战指南
  • COT思维链:SequentialChain 方法有哪些参数;优化后的提示词
  • ES面试题系列「一」
  • MySQL的索引分类