<commit_before>---
layout: post
title:  "javascript异步编程和Promise"
categories: [javascript]
---

javascript是单线程的，但有两种执行模式:同步和异步。

关于同步和异步的效果我写了一个<a href='http://blog.fruitsandwich.cc/webTraining/lession03/asynchronous.html'>示例</a>。

同步就是执行顺序和任务顺序时一致，同步的；异步任务都需要指定一个或多个回调函数，前一个任务执行结束后，不是执行后一个任务而是执行回调函数，后一个任务不等前一个任务执行完就执行，程序的执行顺序和任务排列顺序是不一致的，异步的。

关于异步编程模式阮一峰总结了<a href='http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html'>4个方法</a>

1. 回调函数
2. 事件监听
3. 发布订阅
4. **Promise对象**

## 一、Promise

这里来说说<a href='https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise'>Promise</a>。
MDN关于Promise中文给出的解释是：

```
所谓Promise，简单说就是一个容器，里面保存着某个未来才会结束的事件（通常是一个异步操作）的结果。
```

ES6将Promise写进了语言标准统一了用法。比较详细的API:<a href='http://es6.ruanyifeng.com/#docs/promise'>ECMAScript6入门</a><commit_msg>域名url换成github page<commit_after>---
layout: post
title:  "javascript异步编程和Promise"
categories: [javascript]
---

javascript是单线程的，但有两种执行模式:同步和异步。

关于同步和异步的效果我写了一个<a href='http://fruitsandwich.github.io/webTraining/lession03/asynchronous.html'>示例</a>。

同步就是执行顺序和任务顺序时一致，同步的；异步任务都需要指定一个或多个回调函数，前一个任务执行结束后，不是执行后一个任务而是执行回调函数，后一个任务不等前一个任务执行完就执行，程序的执行顺序和任务排列顺序是不一致的，异步的。

关于异步编程模式阮一峰总结了<a href='http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html'>4个方法</a>

1. 回调函数
2. 事件监听
3. 发布订阅
4. **Promise对象**

## 一、Promise

这里来说说<a href='https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise'>Promise</a>。
MDN关于Promise中文给出的解释是：

```
所谓Promise，简单说就是一个容器，里面保存着某个未来才会结束的事件（通常是一个异步操作）的结果。
```

ES6将Promise写进了语言标准统一了用法。比较详细的API:<a href='http://es6.ruanyifeng.com/#docs/promise'>ECMAScript6入门</a>
{'fraction_non_alphanumeric': 0.15589123867069488, 'fraction_numerical': 0.01933534743202417, 'mean_word_length': 8.098901098901099, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 19, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2253561', 'n_tokens_mistral': 990, 'n_tokens_neox': 1105, 'n_words': 56}