代码优化及编程习惯

简介: 代码优化及编程习惯

代码

避免 Promise.all 使用


  • Promise.all: 彼此相互依赖或者在其中任何一个reject时立即结束。
  • Promise.allSettled: 所有给定的 promise 都已经 fulfilled 或 rejected 后的 promise,并带有一个对象数组,每个对象表示对应的 promise 结果。

示例:

constpromise1=Promise.resolve(3);
constpromise2=newPromise((resolve, reject) =>setTimeout(reject, 100, 'foo'));
constpromises= [promise1, promise2];
Promise.allSettled(promises).
then((results) =>results.forEach((result) =>console.log(result.status)));
// expected output:// "fulfilled"// "rejected"

目前大部分 Promise.all 使用的场景下,是多个任务并行执行,其中某个失败了也依然需要保证其他任务执行完毕。

p.s. 如果并发任务中有外部请求(如 HTTP Request、数据库查询连接创建等),不要用 Promise.allSettled, 而要自行封装 Promise.parallel 或者使用队列、Pooling(池)等方式去优化处理。

Async / Await 语法糖优化

// 没必要的 async / awaitasyncfunctiondemo1(): Promise<any> {
// 如果方法体内 没有 await 语法糖, 则不需要添加 async// 即便 return 方法为一个 Promise 返回值,也不需要添加 asyncreturnawaitsomeService.somePromiseFunction();
// 如果方法体内 只在 return 部分有一个 await,建议优化掉, 去掉 await 和方法体上的 async}

不要让 await 语句参与运算:

// Bad:someArray.push(awaitsomeFunction());
constsomeObj= {
result: awaitsomeFunction()
};
// Good:constresult=awaitsomeFunction();
someArray.push(result);
constresult=awaitsomeFunction();
constsomeObj= {
result};

使用 RxJS 封装底层方法

学习教程: http://rx.js.cool/

贡献仓库: https://github.com/willin/rx.js.cool

适用场景介绍

前端组件

  • 如绑定鼠标移动事件并进行计算和处理
  • 如绑定鼠标点击事件并设置最小触发间隔
  • 侦听屏幕滚动并且 debounce
  • 等等

示例:

需要可撤销的业务场景

参考: http://rx.js.cool/mixin/undo

流式处理(流程化的方法)

示例:

from(Promise.resolve([
// 模拟数据    { id: 1, name: 'Kitty1', age: 1, breed: 'string' },
    { id: 2, name: 'Kitty2', age: 1, breed: 'string' },
    { id: 3, name: 'Kitty3', age: 1, breed: 'string' },
    { id: 4, name: 'Kitty4', age: 2, breed: 'string' },
    { id: 5, name: 'Kitty5', age: 2, breed: 'string' },
    { id: 6, name: 'Kitty6', age: 2, breed: 'string2' }
  ])).pipe(
// 此处仅用于作为 rxjs 的操作示例// Filter by AgemergeMap((cats: Cat[]) =>iif(
//        () =>age>=0,
// Query 里的数值类型,如果没有默认值,实际为字符串类型of(cats.filter((cat) =>`${cat.age}`===`${age}`)),
of(cats)
      )
    ),
// Filter by NamemergeMap((cats: Cat[]) =>iif(
//        () =>name!=='',
of(cats.filter((cat) =>cat.name===name)),
of(cats)
      )
    ),
// Filter by BreedmergeMap((cats: Cat[]) =>iif(
//        () =>breed!=='',
of(cats.filter((cat) =>cat.breed===breed)),
of(cats)
      )
    ),
// PaginationmergeMap((cats: Cat[]) =>of(cats.slice(offset, offset+limit)))
  );

Promise 方法改写

给出几种示例,更多需要自行摸索:

// 示例1:import { from } from'rxjs';
// getPromise() is called once, the promise is passed to the Observableconstobservable$=from(getPromise());
// 示例2:import { defer } from'rxjs';
// getPromise() is called every time someone subscribes to the observable$constobservable$=defer(() =>getPromise());


相关文章
|
19天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
6951 30
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
4天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
615 138
|
4天前
|
人工智能 弹性计算 运维
阿里云发布堡垒机智能运维Agent,运维交互进入自然语言新时代
支持自然语言运维,提升效率与安全双保障。
1147 0
|
11天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1188 1
|
13天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1286 3
|
11天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
1003 5
|
9天前
|
人工智能 自然语言处理 安全
Vibe Coding 实战:别盲目跟风,先分清 vibe coding 适合什么场景
本文系统总结vibe coding实战经验:明确其适用场景(原型、小工具、标准化模块),剖析5步落地流程(场景判定→结构化提示词→目录初始化→分模块生成→自动化校验),指出四大常见误区,并推荐适配工具Trae。强调“场景匹配+规则前置”是提效关键,避免盲目套用。
815 1
|
2天前
|
人工智能 运维 API
2026年阿里云百炼通义千问Qwen3.7-plus深度介绍 功能特性、使用优势及618大促订阅方案指南
大模型技术的普及,让AI能力逐步融入个人办公、内容创作、代码编写、企业运营、教育培训等各类场景。不同定位的模型对应不同使用需求,旗舰级模型性能强劲但使用成本偏高,轻量化模型价格低廉却难以胜任复杂任务,而介于两者之间的中端主力模型,凭借均衡的能力、亲民的定价、广泛的场景适配性,成为绝大多数个人用户、小型团队、中小企业的首选。
354 1