-
Promise如何实现内容
-
处理回调地狱
var num = 3; var list = []; var img = new Image(); img.src = "./img" + num + "-.jpg"; img.onload = function () { list.push(img); num++; img = new Image(); img.src = "./img" + num + "-.jpg"; img.onload = function () { list.push(img); num++; img = new Image(); img.src = "./img" + num + "-.jpg"; img.onload = function () { list.push(img); num++; img = new Image(); img.src = "./img" + num + "-.jpg"; img.onload = function () { list.push(img); num++; img = new Image(); img.src = "./img" + num + "-.jpg"; img.onload = function () { list.push(img); }; }; }; }; }; // Promise的作用是处理回调地狱,让回调地狱扁平化 function loadImage(src){ return new Promise(function(resolve,reject){ var img =new Image(); img.onload=function(img){ resolve(img); } img.onerror=function(){ reject(); } img.src=src; }) } var arr=[]; var mun=3; loadImage("./img/"+num+"-.jpg").then(function(img){ arr.push(img); num++; return loadImage("./img/"+num+"-.jpg") }).then(function(img){ arr.push(img); num++; return loadImage("./img/"+num+"-.jpg") }).then(function(img){ arr.push(img); num++; return loadImage("./img/"+num+"-.jpg") });
- Promise是一个异步过程
console.log("a"); var p = new Promise(function (resolve, reject) { console.log("b"); resolve(); }); console.log("c"); p.then( function () { console.log("d"); }, function () {} ); console.log("e"); //abced
function loadImage(src) { var p = new Promise(function (resolve, reject) { var img = new Image(); // resolve 是表示正确完成时执行的函数 img.onload = function () { resolve(img); }; // reject是表示错误时执行的函数 img.onerror = function () { reject(src); }; img.src = src; }); return p; }
then和catch
p.then( function (num) { console.log(num) }).catch(function(num){ console.log(num); });
补充:Promise.all(arr),Promise.race(arr)
//Promise.all()将Promise对象数组按照顺序异步全部完成后在then的第一个函数中,传入完成的结果 //这个list参数arr这个promise的对象数组中所有异步then中返回img按顺序组合成的数组 // 也可以理解为将arr中的每个promise的对象异步完成后的then中img按顺序加入到一个数组中, // 全部完成后返回这个数组 Promise.all(arr).then(function(list){ // console.log(list);//所有图片 list.forEach(item=>{ console.log(item.width,item.src); }) }) // Promise.race()作用是将promise对象数组这种最先执行完成的内容通过后面的then传入 Promise.race(arr).then(function(img){ console.log(img.src); })
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。