实现Promise.all()、promise.race()和promise实现异步封装上传图片

122 阅读1分钟

先创建几个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;
        });
      }

\