Всем привет. Никак не могу понять как работают promise, как минимум из-за того, что никак не могу сделать какой либо пример на нем(
Вот например задача: в функцию приходит объект в котором массивы , нужно проверить что это объект, потом пройтись по этим массивам и с задержкой вывести все значения.
У меня промис выдает ошибку - “Cannot read property ‘then’ of undefined”.
function load(url) {
if (typeof url) {
for (let key in url) {
return new Promise(function(resolve, reject) {
if (Array.isArray(url[key])) {
return resolve(1);
} else {
return reject(new Error("не удалось выполнить..."));
}
});
}
}
}
load().then(function(res) {
// тут как я понял делаем задержку?
console.log(res);
});
load().catch(function(err) {
console.log(err.message);
});
load({
currentYearDate: ["text", "text1"],
previousYearDate: ["teeeeext1"]
});
Тебе не понятен урок по промисам на learn.javascript.ru?
Если промис выполняется успешно, то вызывается один callback (функция обратното вызова), а если выполняется с ошибкой - то вызывается другой колбэк.
load().then(function(res) {
// тут как я понял делаем задержку?
console.log(res);
});
Тут ты вызываешь функцию load вообще без аргументов, у тебя цикл не отрабатывает, никакого промиса не возвращается. То же самое в случае с catch. А потом после этого ты вызываешь load со своим объектом, и этот вызов как раз и вычисляется в промис.
Сохрани получившийся промис и на нем вызывай then / catch:
function load(url) {
if (typeof url) {
for (let key in url) {
return new Promise(function(resolve, reject) {
if (Array.isArray(url[key])) {
return resolve(1);
} else {
return reject(new Error("не удалось выполнить..."));
}
});
}
}
}
const iPromiseYouToLoad = load({
currentYearDate: ["text", "text1"],
previousYearDate: ["teeeeext1"]
});
iPromiseYouToLoad.then(function(res) {
console.log(res);
});
iPromiseYouToLoad.catch(function(err) {
console.log(err.message);
});