async和await的使用
解决问题:可以把异步变成同步等待的操作
使用要求:
1.async和await是配套使用的,await必须写在async函数的内部
2.async是定义在函数function前面,返回一个Promise对象
3.await只能处理Promise对象的异步等待(别的setTimeout,load等造成的异步不能被处理,如果这些异步也想要被处理成同步等待,只能放在Promise里面)
4. 函数中使用return返回的内容可以通过then来获取
使用示例:
function getImage(src) { //返回Promise对象
return new Promise(function (resolve, reject) {
var img1 = new Image();
img1.src = src;
img1.onload = function () {
resolve(img1);
};
});
}
async function loadImages(){ //async也返回Promise对象
var arr=[];
for(var i=3;i<30;i++){
await getImage("./img/"+i+"-.jpg").then(function(img){
arr.push(img);
})
return arr;
}
var p=loadImages(); //函数中使用return返回的内容可以通过then来获取
p.then(function(arr){
console.log(arr);
})
setTimeout等异步的同步等待
var arr=[];
for(var i=0;i<30;i++){
await new Promise(function(resolve,reject){
setTimeout(function(){ //必须放在Promise中
resolve(i);
},1000);
}).then(function(n){
arr.push(n);
})
}
console.log(arr);
}