链式流程 我们已经被暗示过几次,但Promise不仅仅是一个单步的 这个然后那个 操作机制。当然,那是构建块儿,但事实证明我们可以将多个Promise串联在一起来表达一系列的异步步骤。 使这一切能够工作的关键,是Promise的两个固有行为: 每次你在一个Promise上调用then(..)的时候,它都创建并返回一个新的Promise,我们可以在它上面进行 链接。 无论你从then(..)调用的完
Promise的信任 我们已经看过了两个强烈的类比,它们解释了Promise可以为我们的异步代码所做的事的不同方面。但如果我们停在这里,我们就可能会错过一个Promise模式建立的最重要的性质:信任。 随着 未来值 和 完成事件 的类别在我们探索的代码模式中的明确展开,有一个问题依然没有完全明确:Promise是为什么,以及如何被设计为来解决所有我们在第二章“信任问题”一节中提出的 控制倒转 的信
什么是Promise? 当开发者们决定要学习一种新技术或模式的时候,他们的第一步总是“给我看代码!”。摸着石头过河对我们来讲是十分自然的。 但事实上仅仅考察API丢失了一些抽象过程。Promise是这样一种工具:它能非常明显地看出使用者是否理解了它是为什么和关于什么,还是仅仅学习和使用API。 所以在我展示Promise的代码之前,我想在概念上完整地解释一下Promise到底是什么。我希望这能更好
调用API: POST https://ppmessage.com/api/xxxxx https header应为(xxxx应该用token替代): { 'Content-Type': 'application/json', 'Authorization': 'OAuth xxxxx' } api_level:获取到的token有固定的api level,使用该token只用调用
获取token分为两个步骤,第一步是获取授权码,第二步才是获取token。 获取demo 获取授权码 请求格式: GET https://ppmessage.com/ppauth/auth?state=xxxx&client_id=xxxx&redirect_id=xxxx&response_type=code 参数说明: 参数 说明 state 表示客户端的当前状态,可以指定任意值,PPMess
附录 D. 第三方工具 Subversion的模块设计(在“分层的库设计”一节讨论过)和语言绑定的能力(在“使用 C 和 C++ 以外的语言”一节描述过)使的我们可以作为扩展和后端支持来替代软件的某些部分,在这个附录里,我们会简略介绍一些使用Subversion功能的第三方的工具。关于更新的信息,可以在Subversion的网站(http://subversion.tigris.org/proje
Go语言的设计包含了诸多安全策略,限制了可能导致程序运行出错的用法。编译时类型检查可以发现大多数类型不匹配的操作,例如两个字符串做减法的错误。字符串、map、slice和chan等所有的内置类型,都有严格的类型转换规则。 对于无法静态检测到的错误,例如数组访问越界或使用空指针,运行时动态检测可以保证程序在遇到问题的时候立即终止并打印相关的错误信息。自动内存管理(垃圾内存自动回收)可以消除大部分野指
第三步:项目的模型 (1). 连接MySQL数据库设置 默认情况下,配置使用SQLite。若不使用SQLite作为数据库,则需要额外的设置,例如 USER,PASSWORD和HOST必须加入。 其中ENGINE设置为数据库后端使用。内置数据库后端有: 'django.db.backends.postgresql' 'django.db.backends.mysql' 'django.db.back
内容提要 本章提供HTTP官方定义的另外一种认证协议————摘要认证。 摘要认证跟基本认证兼容,但更安全,虽然没有得到广泛应用,但对安全事务来说,这些概念是很重要的。 摘要认证的改进 与基本认证相比,摘要认证虽不是最安全的认证方式,但却在以下几点上做了一些改进,以此来降低安全事务风险。 1、永远不会以明文方式在网络上发送密码 2、可以防止恶意用户捕获并重新认证的握手过程 3、可以有选择地防止对报文
动画是我们眼睛中的残影,叫视觉暂留现象。这里有两个关键字,差异与快速。 在网页中,扩展样式的任务早已经交由css处理,让javascript第一次拥有视觉处理的api,setTimeout与setInterval早在css诞生前就已经出现。 一:动画的原理 在标准浏览器中,可计算的样式基本浏览器已经为你转化好,比如width,height,margin-x,border-x-width,paddi
第三章 使用Spring Data Repositories 使用Spring Data Repository可极大地简化为了实现各种持久层的数据库访问而写的样板代码量。 Spring数据存储库文件和你的module层 本章解释了Spring的核心概念和接口数据存储库。本章信息来自Spring数据通用模块,它使用配置和代码示例Java Persistence API(JPA)模块。您正在使用的模块
十三、浏览器中的 JavaScript Web 背后的梦想是公共信息空间,其中我们通过共享信息进行交流。 其普遍性至关重要:超文本链接可指向任何东西,无论是个人的,本地的还是全球的,无论是草稿还是高度润色的。 Douglas Crockford,《JavaScript 编程语言》(视频讲座) 本书接下来的章节将会介绍 Web 浏览器。可以说,没有浏览器,就没有 JavaScript。就算有,估计也
为了使用鼠标操作三维场景,可以借助three.js众多控件之一OrbitControls.js,可以在下载的three.js-master文件中找到(three.js-master\examples\js\controls)。 然后和引入three.js文件一样在html文件中引入控件OrbitControls.js。本节课的目的不是为了深入讲解OrbitControls.js,主要目的一方面向大
讲师:gh0stkey 整理:飞龙 协议:CC BY-NC-SA 4.0 域名商 域名商就是提供域名购买的站点。我们可以通过站长工具的 WHOIS 查询来查询域名商,比如这里我们查询www.hi-ourlife.com的域名商: 我们可以得知,该域名是在万网注册的。 域名商存在一些安全隐患,比如域名商网站包含一套用户系统,其找回密码功能可能存在任意密码重置漏洞(见“逻辑漏洞”一节)。找回密码之后,
尽管 IBM 的深蓝超级计算机在1996年击败了国际象棋世界冠军 Garry Kasparvo,直到近几年计算机都不能可靠地完成一些看起来较为复杂的任务,比如判别照片中是否有狗以及识别语音。为什么这些任务对于人类而言如此简单?答案在于感知主要发生在我们意识领域之外,在我们大脑中的专门视觉,听觉和其他感官模块内。当感官信息达到我们的意识时,它已经被装饰了高级特征;例如,当你看着一只可爱的小狗的照片