JavaScript - Promise.all ()
Promise.all() 메서드는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환합니다.
주어진 프로미스 중 하나가 거부하는 경우, 첫 번째로 거절한 프로미스의 이유를 사용해 자신도 거부합니다.
└ 한가지가 거절하면 all내부의 것들이 다 안돌아도 탈출한다.
매개변수로는 iterable한 (순회가능한) 객체
Promise.all(iterable);
반환값
- 매개변수로 주어진 순회 가능한 객체가 비어 있으면 이미 이행한 Promise.
- 객체에 프로미스가 없으면, 비동기적으로 이행하는 Promise.
- 그렇지 않은 경우, 대기 중인 Promise. 결과로 반환하는 프로미스는 인자의 모든 프로미스가 이행하거나 어떤 프로미스가 거부할 때 (호출 스택이 비는 즉시) 비동기적으로 이행/거부합니다.
반환하는 프로미스의 이행 값은 매개변수로 주어진 프로미스의 순서와 일치하며, 완료 순서에 영향을 받지 않습니다.
이 메서드는 여러 프로미스의 결과를 집계할 때 유용하게 사용할 수 있습니다.
일반적으로 다음 코드를 계속 실행하기 전에 서로 연관된 비동기 작업 여러 개가 모두 이행되어야 하는 경우에 사용됩니다.
입력 값으로 들어온 프로미스 중 하나라도 거부 당하면 Promise.all()은 즉시 거부합니다. 이에 비해, Promise.allSettled()가 반환하는 프로미스는 이행/거부 여부에 관계없이 주어진 프로미스가 모두 완료될 때까지 기다립니다. 결과적으로, 주어진 이터러블의 모든 프로미스와 함수의 결과 값을 최종적으로 반환합니다.
const getValuesString = async (columnNames, columnTypes, data) => {
let valuesString;
try {
valuesString = await Promise.all(
columnNames.map(async (name) => {
let value = data[0][0][name];
console.log('value', name + ':' + value);
if (name === 'RegDate' || name === 'regDate') {
value = 'now()';
return value;
}
if (name === 'issueDate' && value === null) {
value = 'now()';
return value;
}
if (columnTypes.includes(name)) {
value = Number(value);
return value;
}
if (value === null) {
value = ' ';
return value;
}
if (typeof value === 'string') {
return `'${value}'`;
} else if (value instanceof Date) {
return `'${value.toISOString().slice(0, 19).replace('T', ' ')}'`;
} else {
return value;
}
})
);
} catch (error) {
console.log('error', error);
}
return valuesString;
};
객체가 아니여도 결과값엔 포함된다.
위의 것과 같이 사용하였는데 위의 구문이 포함된 함수를 호출시 값을 불러올 때에 콘솔을 찍어보면 promise :<panding>
이런식으로 나온다.
약속 객체?라고 했던거 같은데 사용한 함수 앞에 await을 써주거나 다른 경우에는 .then, .catch를 사용해주어야 한다.
let valuesString = await getValuesString(columnNames, columnTypes, data);
함수사용시 예제 - 이런 식으로 await를 사용해야한다.
let AuthUser = function(data) {
return google.login(data.username, data.password).then(token => { return token } )
}
let userToken = AuthUser(data)
console.log(userToken) // Promise { <pending> }
userToken.then(function(result) {
console.log(result) // "Some User token"
})
.then 예제
Promise - JavaScript | MDN
Promise 객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타냅니다.
developer.mozilla.org