promise是什么?
- promise是一个对象,对象和函数的区别就是对象可以保存状态,有3个状态分别是:等待态(默认) 成功态 失败态,函数不可以(闭包除外)
- 并未剥夺函数return的能力,因此无需层层传递callback,进行回调获取数据
- 代码风格,容易理解,便于维护
- 多个异步等待合并便于解决
ES6 原生提供了 Promise 对象。
No results found
2019年也接近尾声了,一直想写个总结,留坑已久,要么因为工作,要么因为个人还未想好要怎么写,直到现在,2020已来。
先看一眼2018年总结。
2018年终期望实现情况:
Kotlin
、Flutter
、Electron
等,19年除了使用Kotlin
开发过项目写过App,使用Electron
写过一个简单的音乐播放器(跟着教程写的)外,Flutter
、Vue
、TypeScript
等基本都没有进展,Kotlin
仍有像高阶函数
、协程
这样的硬骨头要啃。总的来说,2019年,基本已经没有参与App的开发,主要的工作精力放在了Three.js引擎的开发和跟进维护,参与的项目有DC设计器引擎以及其衍生项目HW数字化3D引擎。接触Three.js快一年了,比起刚刚接触Three.js时一脸懵逼,现在已经好很多,很多的问题和需求已经可以独立开发。
年尾两个月开始转向Cesium 3D引擎的开发,此时又有了刚开始Three.js开发时的无力感。除了在之前Three.js引擎中积累的3D知识经验外,其他又踏上了从零学习之路,Cesium中很多新的知识都要自习。
2019年养成新的习惯,虽说开始也是被动的,但最终想来也是好的,那就是每周总结周报。我记录周报的习惯一般是现将之前未完成的罗列记录,新接到的需求也先纳入记录,待完成后标记完成。这样的好处就是可以帮助我们记录我们工作方向,那些急需完成,那些未完成,规划好时间,本周做不完的需要延续到次周,这样我们的目标便更加明确了。
至于个人技能方面,2019,想了想,好像也没学习什么新的知识或涉及新的领域。说有提升,也是有的,2019虽说没参与公司App开发,但自己有需求或者巩固下Android知识不至于遗忘,还是会建一些demo级的App,主要是面向一些知识点或某个框架,今年新建的App全部采用了Kotlin开发,顺便提升下kotlin开发技能和运用。18年时接触过Flutter开发App,但今年却运用很少,在这方面提升甚微,希望2020年有所突破。
19年还有个比较大的提升就是培养自己多写文档,不止用于公司产品(引擎API文档),自己学习和积累都采用文档的形式记录下来。俗话说,好记性不如烂笔头。18年时,文档采用gitbook发布为电子书的形式,今年,改用vuepress(基于Node.js)发布线上文档,访问加载速度比gitbook更好。
知识在于积累,除了记录学习笔记外,我还建了两个面经库(Android 面经库、 前端面经库),旨在记录平时阅读时、工作中遇到的问题及解决方案。
年末双12购入自己朝思暮想第一个域名(sogrey.top)(真心图便宜),用于绑定我的github pages。
参与Cesium引擎开发,仍需很多东西要学,总是觉得没有方向,刚确定一个比较粗略的路线想系统的学习一下。由于是团队开发,而我们各自开发某个模块,我先采用插件式开发,开发时可脱离主API,开发完成或成型时在引入调用。学无止境,我把学习中遇到的好的资源、教程、博客、开源项目、资源收录在一起,共享学习资料。希望新的一年,站在这些巨人肩上能有更高的拔升。
Three.js引擎,仍有新的需求,比如同一个页面展示多个canvas用来展示多个场景,并且每个不相互干扰,这是个新的方向,可能会对之前引擎大改。
至于对于公司的工作建议或其他建议:
照5D BIM平台功能做个5D BIM App出来。
可以做,要做成什么样,使用什么样的主题,哪些功能能在App上比较实用,而哪些并不实用,实现以什么样的方式实现,有没有相关的设计样例图例,这些都是需求。至于新知识的学习和巩固提升:
总结现在,着眼未来!做更好的自己,成为公司期望的优秀成员!2020年,希望一切都好,继续努力。
之前使用Hexo
(https://sogrey.github.io/ github)和jekyll
(http://sogrey.gitee.io/ gitee(私有仓库))搭建过个人博客,这次选择Hugo
试试。
由于项目需求,需要开发组件化App,开发过程中遇到些问题,特此记录,以防再遇。
Compilation is not supported for following modules: module1, module2, module3. Unfortunately you can’t have non-Gradle Java modules and Android-Gradle modules in one project.
提示以上信息,当然其中的module1, module2, module3
是我举例,实际会报告项目中的mudule
的名字。
Then you should go to File
-> Invalidate Caches / Restart
-> Invalidate Caches & Restart
.
Then try to build the application again.
Click on the button:Sync Project with Gradle Files
1- close the project
2- close Android Studio
IDE
3- delete the .idea
directory
4- delete all .iml
files
5- open Android Studio
IDE and import the project
本地git bash 使用git clone git@github.com:***.git
方式下载github代码至本地时需要依赖ssh key,遇到权限不足问题时一般都是SSH key失效或者SSH key不存在,重新创建SSH key一般就可以解决问题;
一般我们在调试javascript代码时常用的调试方法有:console日志和借助浏览器断点调试。
今遇到要调试node.js。Nodejs提供了一个内建调试器来帮助开发者调试应用程序。想要开启调试器我们需要在代码中加入debugger标签,当Nodejs执行到debugger标签时会自动暂停(debugger标签相当于在代码中开启一个断点)。
先看下几个命令的 说明:
Stepping
cont
, c
- Continue execution 继续执行,直到遇到下一个断点next
, n
- Step next 单步执行step
, s
- Step in 单步执行并进入函数out
, o
- Step out 从函数中步出pause
- Pause running code (like pause button in Developer Tools)Breakpoints
setBreakpoint()
, sb()
- Set breakpoint on current line 当前行设置断点setBreakpoint(line)
, sb(line)
- Set breakpoint on specific line 在特定行上设置断点setBreakpoint('fn()')
, sb(...)
- Set breakpoint on a first statement in functions body 在函数f的第一行设置断点setBreakpoint('script.js', 1)
, sb(...)
- Set breakpoint on first line of script.js
在 script.js 的第20行设置断点clearBreakpoint('script.js', 1)
, cb(...)
- Clear breakpoint in script.js
on line 1 清除断点Information
backtrace
, bt
- Print backtrace of current execution frame 显示当前的调用栈list(5)
- List scripts source code with 5 line context (5 lines before and after) 显示当前执行到的前后5行代码watch(expr)
- Add expression to watch list 把表达式 expr 加入监视列表unwatch(expr)
- Remove expression from watch list 把表达式 expr 从监视列表移除watchers
- List all watchers and their values (automatically listed on each breakpoint) 显示监视列表中所有的表达式和值repl
- Open debugger’s repl for evaluation in debugging script’s context 在当前上下文打开即时求值环境exec expr
- Execute an expression in debugging script’s context 在调试脚本的上下文中执行表达式Execution control
run
- Run script (automatically runs on debugger’s start) 执行脚本,在第一行暂停restart
- Restart script 重新执行脚本kill
- Kill script 终止当前执行的脚本Various
scripts
- List all loaded scripts 显示当前已加载的所有脚本version
- Display V8’s version 显示v8版本这个问题遇到过好几次,起初是在开发Android是adb端口被占用,就连360都曾占用过;特此记录:
这次是 35729
被占用了,看操作:
1 . 查看占用端口的进程PID
1 | netstat -ano|findstr 35729 # 35729是我这边被占用的端口,你根据自己的情况下而定。 |
输出如下:
1 | E:\workspace\VSCode\three.js\Three.js-start (master -> origin) |
2 . 看到 35729
端口的 PID 是 8084
,通过PID查看所有进程,看看谁在作祟
1 | tasklist /fi "PID eq 8084" |
1 | E:\workspace\VSCode\three.js\Three.js-start (master -> origin) |
3 . PID,干掉它:
1 | taskkill /pid 8084 /f |
1 | E:\workspace\VSCode\three.js\Three.js-start (master -> origin) |
完工。
Console 对象用于 JavaScript 调试。
JavaScript 原生中默认是没有 Console 对象,这是宿主对象(也就是游览器)提供的内置对象。 用于访问调试控制台, 在不同的浏览器里效果可能不同。
Console 对象常见的两个用途:
在windows 上:
从https://github.com/soimort/you-get/releases/latest下载,解压后在cmd中切换至目录下执行you-get即可
安装python,执行
1 | $ pip3 install you-get #安装 |
下载ffmpeg从ffmpeg.org并添加到PATH
1 | Usage: you-get [OPTION]... [URL]... |
默认情况下,下载最高清晰度视频
输入任意内容如:you-get “i love china” 可以从Google内搜索并下载视频,youtube-dl也有类似功能
bug地址:https://github.com/soimort/you-get/issues
-c和-p参数非常好用