fetch
является асинхронным, по существу, вы будете иметь доступ только к содержанию JSon в переменной courses
после fetch
promise решает. Попробуйте сделать следующее:
function synchronousCode(courses) {
console.log('courses', courses); // output json courses
}
fetch(link)
.then(function(response) {
return response.json();
})
.then(synchronousCode)
.catch(function(ex) {
console.log('parsing failed', ex);
});
Одним из преимуществ использования Выборки API является то, что вы аккуратно можете приковать свои методы вместо того, чтобы просто иметь одну функцию «synchronousCode
». Вот пример:
function asynchronouslyAnalyze(courses) {
return new Promise(function(resolve, reject) {
setTimeout(function() { resolve(courses) }, 1000);
});
}
function parse(courses) {
// do something with courses
return courses;
}
function print(courses) {
console.log('courses', courses); // output courses json
}
function toJSON(response) {
return response.json();
}
fetch(link)
.then(toJSON)
.then(asynchronouslyAnalyze)
.then(parse)
.then(print)
.catch(function(ex) {
console.log('parsing failed', ex);
});
Надеюсь, что это поможет!
'fetch' всегда асинхронный, то есть любой синхронный код, размещенный впоследствии, будет * всегда * исполняться до вызова обратного вызова fetch.then'. – nils
Итак, как мне выполнить этот синхронный код после извлечения? –
@JoshuaRajandiran: Просто положите его на обратный вызов – Bergi