先创建几个promise对象
var p1 = new Promise((resolve, reject) => {
resolve("成功1");
});
var p2 = new Promise((resolve, reject) => {
resolve("成功2");
});
var p3 = new Promise((resolve, reject) => {
reject("失败了..");
});
实现Promise.all()
Promise.myAll = function (promises) {
return new Promise((resolve, reject) => {
if (!Array.isArray(promises)) {
return reject(new Error("promise.all() must accept an array"));
}
const len = promises.length;
const resArr = [];
for (let i = 0; i < len; i++) {
promises[i].then(
(res) => {
resArr.push(res);
if (resArr.length === len) {
return resolve(resArr);
}
},
(err) => {
return reject(err);
}
);
}
});
};
试一试
Promise.myAll([p1, p2, p3])
.then((arr) => {
console.log(arr);
})
.catch((err) => {
console.log(err);// 失败了..
});
实现Promise.race()
Promise.myRace = function (promises) {
return new Promise((resolve, reject) => {
if (!Array.isArray(promises)) {
return reject(new Error("accept an array"));
}
promises[0]
.then((res) => {
return resolve(res);
})
.catch((err) => {
return reject(err);
});
});
};
试一试
Promise.myRace([p1, p3])
.then((res) => {
console.log(res);// 成功1
})
.catch((err) => {
console.log(err);
});
promise实现异步封装上传图片
function loadImg(url) {
return new promise((resolve, reject) => {
const img = new Image();
img.onload = function () {
resolve(img);
};
img.onerror = function () {
reject(new Error("fail,cannot load image"));
};
img.scr = url;
});
}
\