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:
parent
2755c1809d
commit
96dfa3b858
@ -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);
|
||||
};
|
||||
}
|
||||
|
@ -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`方法完全一致。
|
||||
|
Loading…
x
Reference in New Issue
Block a user