Promise.all 实际上在幕后做了什么?

pau*_*901 1 javascript asynchronous resolve promise

我试图在这里理解 Promise.all 。我在这里所做的是使用 Promise.all 隐藏下面的代码以达到相同的结果。我理解Promise都是结合了data1,data2。我的问题是,如果没有解析方法,Promise.All 如何工作?Promise 是否在方法本身内解析这些数据?

请指教。

const readAllUsersChaining = () => {
  return new Promise((resolve, reject) => {
    let result = [];
    getDataFromFilePromise(user1Path)
      .then((data) => {
        result.push(JSON.parse(data)); // what are you doing? he's gone mad...
        return getDataFromFilePromise(user2Path);
      })
      .then((data) => {
        result.push(JSON.parse(data));
        result ? resolve(result) : reject(result);
      });
  });
};

Run Code Online (Sandbox Code Playgroud)
const readAllUsers = () => {
  const data1 = getDataFromFilePromise(user1Path);
  const data2 = getDataFromFilePromise(user2Path);
  console.log(data1, data2);
  return Promise.all([data1, data2]).then((data) => {
    return data.map((el) => JSON.parse(el));
  });
};

Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Fel*_*ing 8

我的问题是,如果没有解析方法,Promise.All 如何工作?

不太确定你的意思。Promise.all只是在内部创建一个新的承诺,当所有其他承诺都得到解决时,该新的承诺就会得到解决。

Promise.all以下是参数始终为 Promise 的情况的简单实现:

function all(promises) {
  if (promises.length === 0) {
    return Promise.resolve([]);
  }
  return new Promise((resolve, reject) => {
    const results = [];
    let resolved = 0;
    promises.forEach((promise, i) => {
      promise.then(
        result => {
          results[i] = result;
          resolved++;
          if (resolved === promised.length) {
            resolve(results);
          }
        },
        error => reject(error)
      );
  });
}
Run Code Online (Sandbox Code Playgroud)