//ES5语法,处理异步事件
{
let ajax = function(callback) {
console.log("开始执行ajax函数");
setTimeout(function(){
callback&&callback.call()
},1000);
};
ajax(function(){
console.log("执行ajax函数的回调函数");
})
}
//ES6语法,Promise处理异步事件
{
/*
* 返回一个Promise实例
* 参数:
* resolve 执行下一步操作
* reject 终止当前操作
*
* 方法:
* then() 回调函数,包含两个function,分别对应resolve、reject
*/
let ajax = function(){
console.log("开始执行ajax函数");
return new Promise(function(resolve,reject){
setTimeout(function(){
resolve();
},1000);
})
}
ajax().then(function(){
console.log("执行ajax函数的resolve()函数");
},function(){
console.log("执行ajax函数的reject()函数");
});
}
//ES6语法,Promise处理串联异步事件
{
let ajax = function(){
console.log("第一步:开始执行ajax函数");
return new Promise(function(resolve,reject){
setTimeout(function(){
resolve();
},1000);
})
}
ajax()
.then(function(){
console.log("第二步:执行ajax函数的resolve()函数");
return new Promise(function(resolve,reject){
setTimeout(function(){
resolve();
},1000);
})
})
.then(function(){
console.log("第三步:执行ajax函数的resolve()函数");
return new Promise(function(resolve,reject){
setTimeout(function(){
resolve();
},1000);
})
})
.then(function(){
console.log("第四步:执行ajax函数的resolve()函数");
})
}
//ES6语法,Promise处理串联异步事件过程中的异常处理
{
let ajax=function(num){
console.log("始执行ajax函数");
return new Promise(function(resolve,reject){
if (num>5) {
resolve(num);
} else{
throw new Error("出错了");
}
})
}
ajax(6)
.then(function(num){
console.log("参数:",num);
}).catch(function(err){
console.log("捕获错误:",err);
})
}
//ES6语法,Promise高级用法
/**
* 场景:feed流格式,加载3张图片(即3张图片加载完,再加载图片)
*/
{
// 加载图片
loadImg((src)=>{
return new Promise((resolve,reject)=>{
let img = document.createElement("img");
img.src=src;
img.onload(()=>{
resolve(img);
})
img.onerror((err)=>{
reject(err);
})
})
})
// 将图片显示到页面上
showImgs((imgs)=>{
imgs.forEach(function(img) {
document.body.appendChild(img);
});
})
// 把多个Promise实例,当成一个Promise实例
Promise.all([
loadImg('http://i4.buimg.com/567571/df1ef0720bea6832.png')
]).then(showImgs)
}