getFirstCount
возвращает Math.round((Date.now() - countingStartTime) / 50)
, запускается немедленно и разрешается через 100 мс, поэтому результат равен 2.
getSecondCount
возвращает Math.round((Date.now() - countingStartTime) / 100)
, запускается один раз getFirstCount разрешает (то есть после 100 мс) и разрешает еще через 100 мс, что эквивалентно:
Math.round((Date.now() - countingStartTime) / 100)
Math.round((200 ) / 100)
Math.round(2)
2
Проверка countingStartTime
, когда каждая из функций start выполняется вместо , а не в начале загрузки страницы. (Таким образом, разница между Date.now
и countingStartTime
будет фактически общим временем работы функции)
Кроме того, избегайте явной антипаттерна конструкции Promise - если вы находитесь в функции async
Обещание уже будет возвращено по умолчанию, поверх этого нет необходимости строить new Promise
:
const timeToCountMs = 100;
const count = () => new Promise((resolve) => setTimeout(resolve, timeToCountMs));
async function getFirstCount() {
const countingStartTime = Date.now();
await count();
return Math.round((Date.now() - countingStartTime) / 50);
}
async function getSecondCount() {
const countingStartTime = Date.now();
await count();
return Math.round((Date.now() - countingStartTime) / 100);
}
async function getTotalCount() {
var firstCount = await getFirstCount();
var secondCount = await getSecondCount();
return firstCount + secondCount;
}
getTotalCount().then(console.log);