Promise.all 到底做了什么?
What does Promise.all actually do under the hood?
我想在这里理解 Promise.all。
我在这里所做的是使用 Promise.all 隐藏下面的代码以获得相同的结果。
我了解到Promise 都结合了data1,data2。
我的问题是 Promise.All 在没有 resolve 方法的情况下如何工作?
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);
});
});
};
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));
});
};
My question here is that how does Promise.All work without resolve method?
不太清楚你的意思。 Promise.all
只是在内部创建一个新的 promise,当所有其他 promise 都被解决时,它就会被解决。
这里是 Promise.all
的简单实现,用于参数始终是 promises 的情况:
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)
);
});
}
Promise.all
允许在执行 then
方法附加之前等待所有作为参数传递的承诺被填充。
真正的用例是当您必须对 API 执行五次调用时,并且您只想在从所有 API 调用中获取数据后才执行一些处理。您可以依赖 Promise.all
函数,该函数将等待所有通过的承诺被填满,以便轮到它被填满。
下面我提供了一个 Promise.all
调用的示例。其中有两个 Promise 作为参数传递。第一个有一个计时器,它在 5 秒后将其填满,第二个如果立即填满,但是。 Promise.all
只有当两个承诺都作为参数传递给 fullfilled
时才会被 fullfilled
const firstPromise = new Promise((resolve, reject) => {
setTimeout(()=> {
return resolve({
name: "First Promise"
});
}, 5000);
});
const secondPromise = new Promise((resolve, reject) => {
return resolve({
name: "Second Promise"
});
})
const all = Promise.all([firstPromise, secondPromise]).then((response) => {
console.log(response);
});
我想在这里理解 Promise.all。 我在这里所做的是使用 Promise.all 隐藏下面的代码以获得相同的结果。 我了解到Promise 都结合了data1,data2。 我的问题是 Promise.All 在没有 resolve 方法的情况下如何工作? 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);
});
});
};
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));
});
};
My question here is that how does Promise.All work without resolve method?
不太清楚你的意思。 Promise.all
只是在内部创建一个新的 promise,当所有其他 promise 都被解决时,它就会被解决。
这里是 Promise.all
的简单实现,用于参数始终是 promises 的情况:
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)
);
});
}
Promise.all
允许在执行 then
方法附加之前等待所有作为参数传递的承诺被填充。
真正的用例是当您必须对 API 执行五次调用时,并且您只想在从所有 API 调用中获取数据后才执行一些处理。您可以依赖 Promise.all
函数,该函数将等待所有通过的承诺被填满,以便轮到它被填满。
下面我提供了一个 Promise.all
调用的示例。其中有两个 Promise 作为参数传递。第一个有一个计时器,它在 5 秒后将其填满,第二个如果立即填满,但是。 Promise.all
只有当两个承诺都作为参数传递给 fullfilled
const firstPromise = new Promise((resolve, reject) => {
setTimeout(()=> {
return resolve({
name: "First Promise"
});
}, 5000);
});
const secondPromise = new Promise((resolve, reject) => {
return resolve({
name: "Second Promise"
});
})
const all = Promise.all([firstPromise, secondPromise]).then((response) => {
console.log(response);
});