为什么promise.all crash 报错却不一一发送promise?
Why promise.all crash an error but not sending promises one by one?
我是新来的,我的后端 nodejs 有问题。
我有一个对象列表可以帮助我在数据库中找到一辆车,所以我准备了一个一个地获取数据的承诺,并将其发送到 promise.all 中以触发承诺。
函数 getCar 每次都在处理我发送的数据,但是当我对数组执行 promise.all 时,它会出现连接池错误。问题是什么?
function requestData (listOfCar) {
const promiseList = [];
for (let i = 0; i < listOfCar.length; i++) {
promiseList.push(getCar(listOfCar[i]));
}
return Promise.all(promiseList); // crash but sending promises one by one is working
}
function getCar(carFinder) {
// do things and return a query find in sequelize to find a car
// and so it return a promise
}
Promise 总是直接触发,它们不会在 promise.all 内部等待触发。
所以你的问题是你正在向数据库内部的许多请求发送我猜的方式,所以连接池不再接受它
要解决这个问题,您可以添加更多连接池,或者您可以简单地触发 promise little chunk of 5 并等待 promise.all
async function requestData (listOfCar) {
const carLists = [];
for (let i = 0; i < listOfCar.length; i++) {
const tmpListOfPromise = [];
for (let j = 0; j < 5 && i < listOfCar; j++) {
const tmpListOfPromise.push(getCar(listOfCar[i]));
i = i + 1;
}
await Promise.all(tmpListOfPromise).then((response) => {
carLists = carLists.concat(response); // this will push every response in the list
});
}
}
function getCar(carFinder) {
// do things and return a query find in sequelize to find a car
// and so it return a promise
}
我是新来的,我的后端 nodejs 有问题。
我有一个对象列表可以帮助我在数据库中找到一辆车,所以我准备了一个一个地获取数据的承诺,并将其发送到 promise.all 中以触发承诺。
函数 getCar 每次都在处理我发送的数据,但是当我对数组执行 promise.all 时,它会出现连接池错误。问题是什么?
function requestData (listOfCar) {
const promiseList = [];
for (let i = 0; i < listOfCar.length; i++) {
promiseList.push(getCar(listOfCar[i]));
}
return Promise.all(promiseList); // crash but sending promises one by one is working
}
function getCar(carFinder) {
// do things and return a query find in sequelize to find a car
// and so it return a promise
}
Promise 总是直接触发,它们不会在 promise.all 内部等待触发。 所以你的问题是你正在向数据库内部的许多请求发送我猜的方式,所以连接池不再接受它 要解决这个问题,您可以添加更多连接池,或者您可以简单地触发 promise little chunk of 5 并等待 promise.all
async function requestData (listOfCar) {
const carLists = [];
for (let i = 0; i < listOfCar.length; i++) {
const tmpListOfPromise = [];
for (let j = 0; j < 5 && i < listOfCar; j++) {
const tmpListOfPromise.push(getCar(listOfCar[i]));
i = i + 1;
}
await Promise.all(tmpListOfPromise).then((response) => {
carLists = carLists.concat(response); // this will push every response in the list
});
}
}
function getCar(carFinder) {
// do things and return a query find in sequelize to find a car
// and so it return a promise
}