#javascript #async-await
Вопрос:
n и k являются входными данными, 10, 3 соответственно
, Найдите коэффициенты n => 1,2,5,10>
верните K-е значение => 5>
Я становлюсь неопределенным.
Просто изучаю asych/await, это, вероятно, проблема.
функция pthFactor(n, k) {
// Напишите свой код здесь
getFactors(n,k);
async function getFactors(n,k) {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"),7000)
});
if (n === 1 || k === 1) {
return 1;
}
let result = await promise;
console.log(result);
let factors = [];
console.log(factors);
for (let i = 1; i <= n; i ) {
if (n > 10 ** 15 || k > 10 ** 9) {
continue;
}
if (n % i === 0) {
factors.push(i);
console.log(factors);
if ( factors.length === k) {
return factors[k-1];
}
}
console.log(factors);
return 0;
}
}
}
console.log(pthФактор(10, 3));
Комментарии:
1. Код должен возвращать 5, а не неопределенный. На основе входных данных 10 и 3.
Ответ №1:
Ваше return 0
утверждение неуместно, и ваш цикл всегда завершится после первой итерации. Перемещение за return 0
пределы цикла устранит вашу проблему.
async function getFactors(n, k) {
let promise = new Promise((resolve, reject) => {
// I made this timeout shorter, makes the example more interactive
setTimeout(() => resolve('done!'), 1000);
});
if (n === 1 || k === 1) {
return 1;
}
let result = await promise;
let factors = [];
for (let i = 1; i <= n; i ) {
if (n > 10 ** 15 || k > 10 ** 9) {
continue;
}
if (n % i === 0) {
factors.push(i);
if (factors.length === k) {
return factors[k - 1];
}
}
}
return 0;
}
// Log result
(async() => {
const factor = await getFactors(10, 3);
console.log(`async getFactors: `, factor);
})();