杜绝0.1 + 0.2 =0.30000000000000004 问题;

function add(num1, num2) {const num1Digits = (num1.toString().split('.')[1] || '').length;const num2Digits = (num2.toString().split('.')[1] || '').length;const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits));return (num1 * baseNum + num2 * baseNum) / baseNum;
}

异步求和函数

function asyncAdd(a, b, callback) {setTimeout(function () {callback(null, a + b);}, 1000);
}

简化:两数之和

function sumT(a, b) {return await new Promise((resolve, reject) => {asyncAdd(a, b, (err, res) => {if(!err) {resolve(res)}reject(err)})})}const test = await sumT(1, 2)
console.log(test) // 3

加深:多数之和

function sum(...args) {return new Promise((resolve) => {args.reduce((acc, cur) => acc.then((total) => sumT(total, cur)), Promise.resolve(0)).then(resolve);});
}console.time('sum');await sum(1, 2, 3, 4, 5); // 15console.timeEnd('sum');

优化:使用 Promise.all

async function sum(...args) {console.log(args); // 用于考察每次迭代的过程if (args.length === 1) return args[0];  // 如果仅有一个,直接返回let result = [];// 两两一组,如果有剩余一个,直接进入for (let i = 0; i < args.length - 1; i += 2) {result.push(sumT(args[i], args[i + 1]));}if (args.length % 2) result.push(args[args.length - 1]);return sum(...(await Promise.all(result))); // Promise.all 组内求和
} test = await sum(1, 2, 3, 4, 5);

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.A new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your teamhttps://serious-lose.notion.site/Addition-d55df1e3417147f096855f4977ddf425

JS Addition相关推荐

  1. 金蝶客户端提示“您使用的管理软件存在版权问题”报错排查步骤

    用了K3 12.3提示金蝶K3 WISE管理软件存在版权问题,但是系统是正版的,提示内容如下: 你使用的管理软件存在版权问题,为了保护你的合法权益,请与金蝶软件(中国)有限公司联系 有三种可能: 1. ...

  2. 如何使用Next.js创建动态的Rick and Morty Wiki Web App

    Building web apps with dynamic APIs and server side rendering are a way to give people a great exper ...

  3. next.js_Next.js手册

    next.js I wrote this tutorial to help you quickly learn Next.js and get familiar with how it works. ...

  4. react.js做小程序_如何使用React.js构建现代的聊天应用程序

    react.js做小程序 In this tutorial, I will guide you to build your own group chat application using React ...

  5. 我对Node.js Core的首次贡献中学到了什么

    by Yael Hermon 通过Yael Hermon 我对Node.js Core的首次贡献中学到了什么 (What I Learned from My First Contribution To ...

  6. node seneca_使用Node.js和Seneca编写国际象棋微服务,第1部分

    node seneca (This is Part 1 of a three-part series [Part 2, Part 3]) (这是一个由三部分组成的系列文章的第1部分[ 第2 部分 , ...

  7. 从头开始写框架(一):浅谈JS模块化发展

    博客申请下来已经过去一个月了,一直不知道写点什么,毕竟我的文笔不是很好orz. 不过既然申请下来了,不写点什么总是觉得很可惜.正好最近在自己写框架,就把自己的进程和一些心得体会分享出来吧. 写在前面: ...

  8. Ext JS 4倒计时:动态加载和新的类系统

    Today we're excited to release the first in a series of brand new features in Ext JS 4. Over the nex ...

  9. Ext JS 4预览:重构和规范渲染过程()

    Over the past 4 years, the Ext JS codebase has evolved; new components have been added and coding st ...

最新文章

  1. 转变矛头,号称攻破BCH网络的Bitpico或与BCE决裂
  2. 大学期间可以获得哪些荣誉_大学期间没有什么荣誉经历,该怎么写简历呢?找工作会很难吗?...
  3. 【NLP】基于机器学习的文本分类!
  4. [Win 7]Windows7 RC 简体中文版测试正式开始了哦!!
  5. 《硝烟中的Scrum和XP》书摘(1)
  6. Java各个类型转化
  7. 软件产品质量要求与评价_软件质量模型
  8. 创建预编译头 Debug 正常 Release Link Error:预编译头已存在,使用第一个 PCH
  9. ios控制ios_iOS UIMenuController UIMenuItem
  10. PowerBuilder9.0 安装包及注意事项
  11. ROS安装教程(ubuntu16.04安装ROS Kinetic)
  12. 如何更改微信标签名字_微信如何设置备注及标签 来学习吧
  13. SE Block (Sequeze and Excitation)
  14. 字节跳动实习面经(已拿offer附攻略)
  15. 与门非门在电子计算机中的应用,与非门电路
  16. 第一次初学游泳+自我总结+小窍门
  17. Linux那些事儿 之 戏说USB(37)字符串描述符
  18. 程序员 2015 年工作总结
  19. 微信小程序——VW、VH
  20. 千兆级LTE时代的重要技术——免许可频谱与小型基站深入解析

热门文章

  1. c mysql异常捕获异常,c#基础之异常处理及自定义异常 从SQLServer转储数据到MySQL...
  2. 2018上半年信息安全工程师真题含答案(下午题)
  3. python定义栈_Python栈实现
  4. hbase 查询_云HBase发布全文索引服务,轻松应对复杂查询
  5. 算法与数据结构(六):堆排序
  6. mysql之事件的开启和调用
  7. 給服务器增加swap空间缓解内存压力
  8. nefu 519 昨日重现
  9. 菜鸟喜欢的C# 入门认识和添加,修改,删除 文件夹 文件 大全(转)
  10. Flutter ValueNotifier 异步通信、ValueListenableBuilder异步更新数据