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
+19 -1
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);
};
}
+25 -3
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`方法完全一致。