We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Promise 用于异步计算,可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。
可以在对象之间传递和操作 Promise,帮助我们处理队列。
new Promise(function(resolve,reject){ resolve(); // 数据处理完成 reject(); //数据处理出错 }).then(function(res){ // 成功数据 res },function(error){ // 处理错误 error });
一个 Promise 可能有三种状态:
一个 Promise 状态只可能从“等待”转到“完成”或“拒绝”,不能逆向转换,同时“完成”和“拒绝”不能相互转换。
当 Promise 状态发生改变,就会触发 then 函数。
then
then函数接受两个参数,第一个参数是成功时的回调,在 Promise 由“等待“状态转换到”完成“状态时调用;第二个参数是失败时回调,在 Promise 由“等待”状态转换为“拒绝”状态时调用。
then可以接受另加一个 Promise 传入,也接受一个 “类then” 的对象或方法,即 thenable 对象。
thenable
同一个 Promise 的 then 可以调用多次,并且回调的执行顺序跟它们被定义的顺序一致。
Promise.then()
fulfilled
rejected
Promise
在嵌套 Promise.then()时 ,由于 Promise.then() 返回的还是一个 Promise,所以下一级的 Promise.then() 会等到里面的 Promise.then() 执行完后再执行。
Promise.catch() 是 Promise.then(resolve,reject) 中 reject 的别名,用于指定发生错误的回调函数。用法如下:
Promise.catch()
Promise.then(resolve,reject)
reject
new Promise((resolve,reject)=>{ }).then(res=>{ }).catch(error=>{ });
Promise.catch() 也会返回一个 Promise,并且其状态也为 pending。
pending
reject 的作用等同于抛出一个异常。如果 Promise 状态已经变成 resolved ,再抛出错误是无效的
resolved
Promise.finally() 是用于指定无论 Promise 最终状态如何,都会执行的操作,是在 ES2018 中引入的。用法如下:
Promise.finally()
new Promise((resolve,reject)=>{ }).then(res=>{ }).catch(error=>{ }).finally(()=>{ });
Promise.finally()方法的回调函数不接受任何参数,因此Promise.finally()方法里面的操作,与Promise的状态无关。
Promise.finally() 本质上是 Promise.then() 的特例,Promise.finally() 方法总是会返回原来的值。
Promise.all 方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。使用方法如下:
Promise.all
new Promise.all([p1,p2,p3]);
Promise.all 的参数可以不是数组,但参数必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。
Promise.all 的状态由传入的参数决定,分为两种情况:
Promise.race 方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。使用方法如下:
Promise.race
new Promise.race([p1,p2,p3]);
只要参数中的任何一个状态更改,其返回结果则为率先改变的 Promise 实例。
Promise.resolve 方法可以将现有对象转为 Promise 对象,如下:
Promise.resolve
const jsPromise = Promise.resolve($.ajax('/whatever.json'));
Promise.resolve 方法的参数分为四种结果:
参数是一个 Promise 实例 Promise.resolve将不做任何修改,原封不懂的返回。
参数是一个 thenable 对象
thenable 对象指的是具有 then 方法的对象,如下:
const thenable = { then: function(resolve,reject){ resolve(); } };
Promise.resolve 会将这个方法转为 Promise 对象然后立即执行 thenable 对象中的 then 方法。
参数不是具有 then 方法的对象,或根本就不是对象 Promise.resolve 会返回一个新的 Promise 对象的实例,其状态为 fulfilled。
不带有任何参数 Promise.resolve 方法允许调用时不带参数,它回直接返回一个状态为 fulfilled 的 Promise 实例。
Promise.reject 也会返回一个 Promise 实例,状态为 rejected。
Promise.reject
const jsPromise = Promise.reject('Error');
Promise.try就是模拟 try 代码块。
Promise.try
try
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Promise 的作用
Promise 用于异步计算,可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。
可以在对象之间传递和操作 Promise,帮助我们处理队列。
Promise 的声明
Promise 的状态
一个 Promise 可能有三种状态:
一个 Promise 状态只可能从“等待”转到“完成”或“拒绝”,不能逆向转换,同时“完成”和“拒绝”不能相互转换。
当 Promise 状态发生改变,就会触发
then
函数。then
函数接受两个参数,第一个参数是成功时的回调,在 Promise 由“等待“状态转换到”完成“状态时调用;第二个参数是失败时回调,在 Promise 由“等待”状态转换为“拒绝”状态时调用。then
可以接受另加一个 Promise 传入,也接受一个 “类then” 的对象或方法,即thenable
对象。同一个 Promise 的
then
可以调用多次,并且回调的执行顺序跟它们被定义的顺序一致。Promise 常用的函数
Promise.then()
Promise.then()
接受两个函数作为参数,分别代表fulfilled
状态下的响应函数 和rejected
状态下的响应函数。Promise.then()
返回一个新的Promise
实例,所以支持链式调用。Promise
状态发生改变时,Promise.then()
会根据其返回的最终状态,调用相应的响应函数。Promise.then()
中可以返回一个新的Promise
或其他值。Promise
时,那么下一级Promise.then()
会在新的Promise
状态改变后执行。Promise.then()
会立即执行。在嵌套
Promise.then()
时 ,由于Promise.then()
返回的还是一个Promise
,所以下一级的Promise.then()
会等到里面的Promise.then()
执行完后再执行。Promise.catch()
Promise.catch()
是Promise.then(resolve,reject)
中reject
的别名,用于指定发生错误的回调函数。用法如下:Promise.catch()
也会返回一个Promise
,并且其状态也为pending
。reject
的作用等同于抛出一个异常。如果Promise
状态已经变成resolved
,再抛出错误是无效的Promise.finally()
Promise.finally()
是用于指定无论Promise
最终状态如何,都会执行的操作,是在 ES2018 中引入的。用法如下:Promise.finally()
方法的回调函数不接受任何参数,因此Promise.finally()
方法里面的操作,与Promise
的状态无关。Promise.finally()
本质上是Promise.then()
的特例,Promise.finally()
方法总是会返回原来的值。Promise.all()
Promise.all
方法用于将多个Promise
实例,包装成一个新的Promise
实例。使用方法如下:Promise.all
的参数可以不是数组,但参数必须具有 Iterator 接口,且返回的每个成员都是Promise
实例。Promise.all
的状态由传入的参数决定,分为两种情况:Promise
状态完成,该Promise
才算完成,其返回结果为全部值的数组。Promise
则失败,此时第一个被reject
的实例的返回值。Promise.race()
Promise.race
方法同样是将多个Promise
实例,包装成一个新的Promise
实例。使用方法如下:只要参数中的任何一个状态更改,其返回结果则为率先改变的
Promise
实例。Promise.resolve()
Promise.resolve
方法可以将现有对象转为Promise
对象,如下:Promise.resolve
方法的参数分为四种结果:参数是一个
Promise
实例Promise.resolve
将不做任何修改,原封不懂的返回。参数是一个
thenable
对象thenable
对象指的是具有then
方法的对象,如下:Promise.resolve
会将这个方法转为Promise
对象然后立即执行thenable
对象中的then
方法。参数不是具有
then
方法的对象,或根本就不是对象Promise.resolve
会返回一个新的Promise
对象的实例,其状态为fulfilled
。不带有任何参数
Promise.resolve
方法允许调用时不带参数,它回直接返回一个状态为fulfilled
的Promise
实例。Promise.reject()
Promise.reject
也会返回一个Promise
实例,状态为rejected
。Promise.try()
Promise.try
就是模拟try
代码块。The text was updated successfully, but these errors were encountered: