- 内容简介
- 译者序
- 前言
- 第 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 入门
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
并行和串行——鱼和熊掌兼得
异步的思维方式并不容易接受。如果你一开始理解起来有困难,那么可以先试试写个同步的方法,就像这样:
try {
var story = getJSONSync('story.json');
addHtmlToPage(story.heading);
story.chapterUrls.forEach(function(chapterUrl) {
var chapter = getJSONSync(chapterUrl);
addHtmlToPage(chapter.html);
});
addTextToPage("All done");
}
catch (err) {
addTextToPage("Argh, broken: " + err.message);
}
document.querySelector('.spinner').style.display = 'none';
它可以正常工作!但是它是同步的,这导致加载内容时会阻塞浏览器。要想让它在异步的方式下工作,需要使用“then”方法来将要做的事情一个个串联起来执行。
getJSON('story.json').then(function(story) {
addHtmlToPage(story.heading);
// TODO: 获取每一章节的内容并显示
}).then(function() {
// 全部完成!
addTextToPage("All done");
}).catch(function(err) {
// 如果有错误发生就执行到这里
addTextToPage("Argh, broken: " + err.message);
}).then(function() {
// 总是要隐藏掉
spinner
document.querySelector('.spinner').style.display = 'none';
});
但是我们该如何遍历章节内容的 URL 并依次获取内容呢?注意,下面的方法是行不通的:
story.chapterUrls.forEach(function(chapterUrl) {
// 获取章节内容
getJSON(chapterUrl).then(function(chapter) {
// 将章节内容添加到页面上
addHtmlToPage(chapter.html);
});
});
“forEach”并不会对异步操作做特殊处理,此时我们页面上章节内容显示的顺序是它们加载完成的顺序,所以必须要解决显示顺序的问题。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论