1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00

docs(promise): edit Promise.resolve()

This commit is contained in:
ruanyf 2016-06-12 06:21:58 +08:00
parent 2755c1809d
commit 96dfa3b858
2 changed files with 44 additions and 4 deletions

View File

@ -892,6 +892,23 @@ f()
// hello world
```
如果有多个`await`命令,可以统一放在`try...catch`结构中。
```javascript
async function main() {
try {
var val1 = await firstStep();
var val2 = await secondStep(val1);
var val3 = await thirdStep(val1, val2);
console.log('Final: ', val3);
}
catch (err) {
console.error(err);
}
}
```
4如果`await`后面的异步操作出错,那么等同于`async`函数返回的Promise对象被`reject`
```javascript
@ -1042,7 +1059,8 @@ async function myFunction() {
// 另一种写法
async function myFunction() {
await somethingThatReturnsAPromise().catch(function (err){
await somethingThatReturnsAPromise()
.catch(function (err) {
console.log(err);
};
}

View File

@ -40,7 +40,7 @@ Promise构造函数接受一个函数作为参数该函数的两个参数分
`resolve`函数的作用是将Promise对象的状态从“未完成”变为“成功”即从Pending变为Resolved在异步操作成功时调用并将异步操作的结果作为参数传递出去`reject`函数的作用是将Promise对象的状态从“未完成”变为“失败”即从Pending变为Rejected在异步操作失败时调用并将异步操作报出的错误作为参数传递出去。
Promise实例生成以后可以用then方法分别指定Resolved状态和Reject状态的回调函数。
Promise实例生成以后可以用`then`方法分别指定`Resolved`状态和`Reject`状态的回调函数。
```javascript
promise.then(function(value) {
@ -109,6 +109,8 @@ function loadImageAsync(url) {
}
```
上面代码中使用Promise包装了一个图片加载的异步操作。如果加载成功就调用`resolve`方法,否则就调用`reject`方法。
下面是一个用Promise对象实现的Ajax操作的例子。
```javascript
@ -148,11 +150,11 @@ getJSON("/posts.json").then(function(json) {
如果调用`resolve`函数和`reject`函数时带有参数,那么它们的参数会被传递给回调函数。`reject`函数的参数通常是Error对象的实例表示抛出的错误`resolve`函数的参数除了正常的值以外还可能是另一个Promise实例表示异步操作的结果有可能是一个值也有可能是另一个异步操作比如像下面这样。
```javascript
var p1 = new Promise(function(resolve, reject){
var p1 = new Promise(function (resolve, reject) {
// ...
});
var p2 = new Promise(function(resolve, reject){
var p2 = new Promise(function (resolve, reject) {
// ...
resolve(p1);
})
@ -611,6 +613,26 @@ p.then(function () {
上面代码的变量`p`就是一个Promise对象。
需要注意的是,立即`resolve`的Promise对象是在本轮“事件循环”event loop的结束时而不是在下一轮“事件循环”的开始时。
```javascript
setTimeout(function () {
console.log('three');
}, 0);
Promise.resolve().then(function () {
console.log('two');
});
console.log('one');
// one
// two
// three
```
上面代码中,`setTimeout(fn, 0)`在下一轮“事件循环”开始时执行,`Promise.resolve()`在本轮“事件循环”结束时执行,`console.log(one)`则是立即执行,因此最先输出。
## Promise.reject()
`Promise.reject(reason)`方法也会返回一个新的Promise实例该实例的状态为`rejected`。它的参数用法与`Promise.resolve`方法完全一致。