- 内容简介
- 译者序
- 前言
- 第 1 章 安装配置新项目
- 第 2 章 Flexbox 布局介绍
- 第 3 章 用 React Native 开发一个应用
- 第 4 章 在 React Native 中使用导航
- 第 5 章 动画和滑动菜单
- 第 6 章 用 React Native 绘制 Canvas
- 第 7 章 使用 React Native 播放音频
- 第 8 章 你的第一个自定义视图
- 第 9 章 Flux 介绍
- 第 10 章 处理复杂的应用程序状态
- 第 11 章 使用 Node 来实现服务端 API
- 第 12 章 在 React Native 中使用文件上传
- 第 13 章 理解 JavaScript Promise
- 第 14 章 fetch 简介
- 第 15 章 在 iOS 中使用 SQLite
- 第 16 章 集成 Google Admob
- 第 17 章 React Native 组件国际化
- 附录 A React.js 快速介绍
- 附录 B Objective-C Primer
- 附录 C webpack 入门
JavaScript 中的 Promise
已经有些类库实现了 Promise 的功能,如:
•Q
- when
- WinJS
- RSVP.js
这些类库和 JavaScript 原生 Promise 都遵循了一个通用的、标准化的规范:Promises/A+。当你使用 jQuery 时,会发现它也有一个类似的方法 Deferred。但是,Deferred 与 Promises/A+并不兼容,使用的时候需要谨慎。jQuery 中也有 Promise 的类型,但是它只是 Deferred 的一个子集,所以也会有上面的问题。
尽管这些类库在实现的时候都遵循统一的规范,但是他们提供的 API 接口却有差别。JavaScript 中的 API 接口同 RSVP.js 更相似,它像下面这样来创建一个 promise:
var promise = new Promise(function(resolve, reject) {
// 类似异步操作的一些逻辑,然后
...
if (/* 正常执行
*/) {
resolve("Stuff worked! ");
}
else {
reject(Error("It broke"));
}
});
Promise 的构造器接受一个函数作为回调函数,同时给回调函数提供了两个参数:resolve 和 reject。我们可以在回调函数中写一些逻辑,如异步操作等,然后操作成功可以调用 resolve,失败则调用 reject。
就像过去使用“throw”一样,我们通常都会在 reject 时使用 Error 对象。这样做的好处是,它可以捕获相关的堆栈信息,所以在调试时对我们就非常有帮助了。
下面来看看如何使用 Promise:
promise.then(function(result) {
console.log(result); // " 执行成功!
"
}, function(err) {
console.log(err); // Error: " 出问题了
"
});
“then”函数接受两个参数,第一个作为操作成功后的回调函数,第二个作为操作失败后的回调函数。两个参数都是可选的,所以你可以只写一个成功回调函数或者失败回调函数。
JavaScript 中的 Promise 一开始是在 DOM 规范中以“Futures”命名的,后来更名为“Promise”并最终纳入 JavaScript 规范中。之所以这么做是因为它们也可以在无浏览器的 JS 上下文环境(如 Node.js)中使用。
尽管这是一个 JavaScript 特性,但在 DOM 中也可以方便地使用。事实上,在新的所有涉及异步成功/失败方法的 DOM API 中都使用了 Promise,已经实现的有 Quota Management、Font Load Events、ServiceWorker、Web MIDI、Streams 等。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论