mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-25 03:02:21 +00:00
docs(promise): edit Promise.resolve()
This commit is contained in:
parent
2755c1809d
commit
96dfa3b858
@ -892,6 +892,23 @@ f()
|
|||||||
// hello world
|
// 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`。
|
(4)如果`await`后面的异步操作出错,那么等同于`async`函数返回的Promise对象被`reject`。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
@ -1042,7 +1059,8 @@ async function myFunction() {
|
|||||||
// 另一种写法
|
// 另一种写法
|
||||||
|
|
||||||
async function myFunction() {
|
async function myFunction() {
|
||||||
await somethingThatReturnsAPromise().catch(function (err){
|
await somethingThatReturnsAPromise()
|
||||||
|
.catch(function (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ Promise构造函数接受一个函数作为参数,该函数的两个参数分
|
|||||||
|
|
||||||
`resolve`函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;`reject`函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
|
`resolve`函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;`reject`函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
|
||||||
|
|
||||||
Promise实例生成以后,可以用then方法分别指定Resolved状态和Reject状态的回调函数。
|
Promise实例生成以后,可以用`then`方法分别指定`Resolved`状态和`Reject`状态的回调函数。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
promise.then(function(value) {
|
promise.then(function(value) {
|
||||||
@ -109,6 +109,8 @@ function loadImageAsync(url) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
上面代码中,使用Promise包装了一个图片加载的异步操作。如果加载成功,就调用`resolve`方法,否则就调用`reject`方法。
|
||||||
|
|
||||||
下面是一个用Promise对象实现的Ajax操作的例子。
|
下面是一个用Promise对象实现的Ajax操作的例子。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
@ -148,11 +150,11 @@ getJSON("/posts.json").then(function(json) {
|
|||||||
如果调用`resolve`函数和`reject`函数时带有参数,那么它们的参数会被传递给回调函数。`reject`函数的参数通常是Error对象的实例,表示抛出的错误;`resolve`函数的参数除了正常的值以外,还可能是另一个Promise实例,表示异步操作的结果有可能是一个值,也有可能是另一个异步操作,比如像下面这样。
|
如果调用`resolve`函数和`reject`函数时带有参数,那么它们的参数会被传递给回调函数。`reject`函数的参数通常是Error对象的实例,表示抛出的错误;`resolve`函数的参数除了正常的值以外,还可能是另一个Promise实例,表示异步操作的结果有可能是一个值,也有可能是另一个异步操作,比如像下面这样。
|
||||||
|
|
||||||
```javascript
|
```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);
|
resolve(p1);
|
||||||
})
|
})
|
||||||
@ -611,6 +613,26 @@ p.then(function () {
|
|||||||
|
|
||||||
上面代码的变量`p`就是一个Promise对象。
|
上面代码的变量`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()
|
||||||
|
|
||||||
`Promise.reject(reason)`方法也会返回一个新的Promise实例,该实例的状态为`rejected`。它的参数用法与`Promise.resolve`方法完全一致。
|
`Promise.reject(reason)`方法也会返回一个新的Promise实例,该实例的状态为`rejected`。它的参数用法与`Promise.resolve`方法完全一致。
|
||||||
|
Loading…
x
Reference in New Issue
Block a user