Promise是一个容器,保存了某个未来才会结束的事件(通常是一个异步操作)的结果;可以获取异步操作的消息
默认处于pending状态,只有通过fulfilled或rejected改变其状态后then中代码才会执行
const promise = new Promise(function(resolve, reject) { // ... 异步操作 //异步操作结果通过resolve向外传递 resolve(value);//成功时传递 reject(error);//失败时传递 }); promise.then(function(res){ // success }, function(error) { // failure });
then可以链式调用,接受两个回调函数作为参数。
第一个回调函数是Promise对象的状态变为resolved时调用
第二个回调函数是Promise对象的状态变为rejected时调用
这两个函数都是可选的,不一定要提供
都接受Promise对象传出的值作为参数
此时输出结果为: 1,3,2,4
原因:第一个promise保证了alert(1)首先执行,但是then()中的语句并没有promise保证则会按照定时器顺序执行
通过返回一个promise对象再对其使用then,则then中语句会等待前面语句执行完后,再由前一个promise对象状态变为resolve(或reject)时再执行。若前一个状态没有改变则后续不会执行
Promise.prototype.catch()方法是.then(null, rejection)或.then(undefined,rejection)的别名,用于指定发生错误时的回调函数
promise.then(function(res){ // some code // reject(err) 改变其状态为reject }).catch(function(err){ //错误处理语句 })
async声明函数后表示该函数内包含异步操作,async用于声明一个函数是异步,await用于等待一个异步执行完成
async函数会返回一个promise对象,若在函数中return一个值,则该值会通过Promise.resolve()方法传递出去
若没有resolve则默认resolve一个undefined
await等待一个结果,结果可以是一个表达式,表达式计算的结果是promise对象或其它值
async function() { await 等待一个结果(promise对象) }
Eg
本文作者:RKLS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!