一个 Javascript 中异步的小技巧

前言 最近看了一些 js 有关的知识,其中令我这种初学者感到很头疼的一个问题就是异步问题。 今天就我碰到的一个小问题详解一个关于异步的小技巧。 背景 我在程序中需要鉴权,来判断一个用户是普通用户还是管理员,针对不同的用户渲染不同的页面。 每个用户具有唯一的 ID,因此我只需要将管理员的 ID 放到数据库,然后加载程序的时候一一比对即可。 但是我的主程序初始化与页面的初始化是异步的,管理员的判断逻辑我放在了主程序初始化中,这也就意味着很可能我页面在加载时,主程序还没有判断完用户的身份。 每个人默认不是管理员,因此这就会导致一个问题——管理员可能也会显示成普通用户的页面,因为渲染页面的时候程序还不知道这个用户是管理员。 方案 这个方案其实是我从官方的代码上学到的,其实就结合代码给大家讲一下。 官方这里是在获取用户的 userInfo 时用到的。 主程序初始化部分代码: 这里主程序的逻辑就是在 getSetting 调用成功后,判断是否已经获得过 userInfo ,如果已经获得过,则可以直接调用 getUserInfo 函数获取值,赋值成一个主程序的全局变量,所有页面都可以用。 接下来就是一个比较奇怪的点了 可以看到官方的注释为 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 所以此处加入 callback 以防止这种情况 这里判断了主程序内是否含有 userInfoReadyCallback 这个函数,如果有的话就执行。 qq.getSetting({ success: res => { if (res.authSetting['scope.userInfo']) { // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 qq.getUserInfo({ success: res => { // 可以将 res 发送给后台解码出 unionId this.globalData.userInfo = res.userInfo // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 // 所以此处加入 callback 以防止这种情况 if (this....

January 19, 2022 · 1 min · zzsqwq

记一次博客迁移记录

前言 更换博客系统的想法已经萌生很久了,一个是感觉 Handsome 这个主题有点看腻了,但是在 Typecho 中好似已经没有更好的博客主题可选择了。 有一个看起来貌似很不错,主题名叫 maupassant。效果如下图所示,顺附链接 pagecho/maupassant(github.com) 不过一直没有下定决心更换,后来也尝试过使用 WordPress,又觉得 WordPress 体量有点太大了。 每天逛 Github 的时候看到了很多很不错的静态博客主题,那天看到一个学长分析学校校园网的博客,第一眼就感觉很不错,找寻了一下发现博客基于 Hugo,主题是 hugo-PaperMod。 于是顺着寻找了一下,发现 Hugo 中很多博客主题非常的不错。此外,Hugo 相比于 Hexo 也有很多优点:博客构建速度快,基于模板的概念组织内容,环境配置容易,在 Ubuntu 下一行命令即可,而 Hexo 依赖于 Node.js,体量稍微有点大。 于是决定把博客迁移到 Hugo,并且采用主题 Coder 。 过程 Typecho 文章导出 这里采用了 lizheming 大大的迁移插件:lizheming/typecho-export-hugo 具体导出为 zip 的时候可能会提示损坏,这样的话可以直接去服务器 \tmp\Export2Hugo 下面打包。 安装 hugo 过程基于 Windows 平台,很简单,在 这里 下载 hugo 最新的 release 版本,找到对应自己系统的即可。下载后解压到某个目录下,设置一下环境变量即可。这里牵扯到 hugo 和 hugo_extended 两个版本的区别,以下是某个 issue 中的解释: I agree. The only functional difference is SASS/SCSS The technical build time difference is that it requires a C++ build chain for the target platform to build, the reason why we currently only build the extended for 3 platforms (Windows, Linux, MacOS) Binaries are slightly less portable as you need a compatible Libc version on your computer (for Windows we build a fully static version as Libc is rather uncommon unless you have Visual Studio or something installed)....

December 13, 2021 · 2 min · zzsqwq

Markdown 编辑器推荐

前言 近期著名 Markdown 编辑器 Typora 宣布收费了,起初感觉很难受,后来感慨之余也觉得算是合理,毕竟 Typora 用起来感觉是真的很良心,也在考虑是否买一份支持一下。 已于2021/12/10购入,还是选择回归了 Typora 了哈哈哈 虽说左右分屏的设计可能更符合 Markdown 的初衷,但是像 Typora 这种所见即所得(WYSIWYG) 的书写体验确实是感觉习惯了就回不去了。 因此近期也搜集了 Markdown 编辑器作为 Typora 的替代品,在这里给大家分享一下。 特别声明,下面的分享多是我日常体验中的一些感受,可能不够客观,比较片面,大家可以自己使用体验一下! 一、Obsidian 界面预览 特点 具有文档的双向链接 支持行级和块级公式 官网可以购买 sync 套餐保持各个客户端同步 可以购买 publish 服务将 markdown 发布为排版美观的界面 有丰富的插件,例如日历、待办清单、Git同步等等。 有Linux,Windows,iPad等多平台支持。 使用体验 Obsidian 中文为黑曜石。我觉得它的图标很好看。 在我使用的一段时间内,他给我的感觉是,功能十分丰富的一个 Markdown 文件管理工具。如果你购买了他的同步服务,那你可以很轻松的在各平台同步你的 Markdown 文件夹,并且基于他强大的插件,可以很完成很多 Markdown 文件份外的事,例如待办清单、日历等等。 他虽没有所见即所得的模式,但是依靠其一款第三方插件,可以达成类似的效果,不过还是用起来不如 Typora 这种顺手。同时,它的各端同步如果不开启官方的服务,用起来还是挺麻烦的,经过我的一阵倒腾,我总结了如下几个方案: 使用第三方Git管理插件,可以定时推送文件夹中的内容到仓库,这样可以完成 linux 与 Windwos 平台的同步,只需要在某一方推送某一方拉取即可。而 Windows 平台与 iPad 平台的同步,可以借助 Apple 的 iCloud,Windows上有对应的客户端,这也是 Obsidian 官方支持的。不过在我使用的过程中我发现,这样异常的麻烦,使用 Git 来管理很可能会产生冲突,导致需要手动处理冲突,久而久之就会觉得很烦。 使用自建云盘如 NextCloud + Obsidian,或者 Seafile + Obsidian。 这个是我觉得目前非常可行的一个方案,最近我也有在尝试 NextCloud,它的多端同步做的非常不错,依靠此可以在各个平台同步文件夹,加上 Obsidian 强悍的能力,是不错的组合!...

December 1, 2021 · 1 min · zzsqwq

2021版小新Pro14 Ubuntu 20.04 配置指南

2021版小新Pro14 Ubuntu 20.04 配置指南 补充 最近重装了 Ubuntu 20.04,又找了相关的一些帖子,发现 聯想Yoga 14s 2021款裝機小記 中提到了下文中提到的屏幕闪烁的问题,解决办法是:只需要在内核参数中加入 i915.enable_psr=0 即可。 具体操作步骤如下: $ sudo vim /etc/default/grub 在 GRUB_CMDLINE_LINUX_DEFAULT 这一行的最后添加 i915.enable_psr=0,保存后终端运行: $ sudo update-grub 然后重启即可。 前言 苦于沉重游戏本的迫害,新买了一台小新Pro14 2021款,上手感觉还挺不错的。如下是配置: CPU:酷睿 i5-11300H 显卡:集成显卡 Intel 锐炬Iris Xe 内存:16G 外存:512 SSD 屏幕:分辨率 2880x1800、400nits、100%sRGB 这里需要注意的是,不同时间出的小新Pro14配置是不太一样的,所以我这里列了一下配置。主要区别在于有一部分是2.2K分辨率+MX450显卡,而我这个是2.8K分辨率+锐炬Iris Xe显卡。 为了工作的需要,要装一个Ubuntu,先是装了之前用过的 Ubuntu 18.04,安装后发现触摸板无法使用,一系列探索后无果,在朋友的推荐下,还是决定安装 Ubuntu 20.04 试一下,踩了一些坑,在这里记录一下。 问题列表 如果你遇到了以下问题,那么这篇文章的方法可能会对你有益处: Ubuntu 18.04 相关 Ubuntu 18.04 无法使用触摸板 Ubuntu 18.04 无法使用内置键盘 Ubuntu 18.04 无法调节亮 Ubuntu 18.04 查看GPU发现是llvm,而不是Iris Xe Ubuntu 20.04 相关 Ubuntu 20....

November 2, 2021 · 2 min · zzsqwq

关于Git的一些理解

前言 前段时间在 Github 学完了关于 git 的小游戏 learnGitBranching ,受益匪浅。 它通过可视化的方式将分支的关系,每条命令的作用等都明明白白的体现出来,可以很直观的感受到你每条命令对整个分支树,每一个 ref 的作用。 通过这种学习感觉自己对 Git 的理解更加深入一步,能够理解其中的原理,而不是浅尝辄止,照猫画虎。 学习中记了一些零零散散的思路,想要写一篇笔记记录出来,之前已经写过一个简单的 Git 教程,这篇教程将会更加深入,希望可以帮助大家更好的掌握 Git。 窃认为,想要学好 Git ,必须要理解清楚其中的分区以及引用,学会了这两个,各种基本操作就很容易理解了。接下来的笔记也基本以此思路展开。 Git中的分区 首先,Git中存在三大分区,分别是工作区、暂存区、版本库。其中, 工作区即我们工作的目录,暂存区是我们执行 git add 后文件存在的区域。 我们可以通过 git status 对两种状态进行查看,例如: ~/test master* base ❯ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: test Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>....

July 23, 2021 · 3 min · zzsqwq