应用场景
用于处理可以各种繁复的异步回调,防止形成回调嵌套,形成 Callback Hell。
用于确定异步请求先后执行顺序,当多个异步请求之间存在相互依赖关系,在网络不稳定的情况下异步请求返回的先后顺序也可能不确定,从而出现页面加载出错。
示例
getVal(true)
.then(function(msg) {
return msg;
})
.then(function(msg) {
return msg + 'n2-stepn'
})
.then(function(msg) {
console.log(msg + '3-step');
})
getVal(false)
.then(function(msg) { console.log(msg) })
.catch(function(msg) { console.log(msg) })
var step1 = new Promise(function (resolve) {
setTimeout(function () {
resolve('step-1');
},5000);
})
var step2 = new Promise(function (resolve) {
setTimeout(function () {
resolve('step-2');
},1000);
})
Promise.all([p1,p2]).then(function (result) {
console.log(result);
})
通过上面示例可看出:
reslove 相当于ajax中的success回调,并传递一个参数用于后续操作
reject 相当于ajax中error回调,同时将错误信息传递
then(onFulfilld,onRejected) 用于promise的链式调用(每次执行该方法总会返回一个Promise对象),保证按照我们的需要的顺序进行。同时,第一个参数onFulfilled 函数中的返回值可作为后续操作的参数。
catch 方法是 then(onFulfilled,onRejected) 方法当中 onRejected 函数的一个简单的写法,也就是说可以写成then(fn).catch(fn)
Promise.all 方法可以接收一个元素为 Promise 对象的数组作为参数,当这个数组里面所有的 Promise 对象都变为 resolve 时,该方法才会返回。与它类似的,Promise.race 它同样接收一个数组,不同的是只要该数组中的 Promise 对象的状态发生变化(无论是 resolve 还是 reject)该方法都会返回。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|