fetch(url)
и response.json()
оба возвращают обещание.Что вы можете сделать с Promises - это использовать оператор .then()
.Это позволяет вам выполнить некоторый код после разрешения Обещания .Что касается приведенного выше кода, вы заметите, что если вы запустите его как есть, вы получите:
"outside getJobs function[object Promise]"
"inside getJobs fuction [object Object], [object Object], ..."
Это потому, что getJobs()
возвращает Обещание.Итак:
jobs = getJobs();
console.log("outside getJobs function" + jobs);
Выполняет console.log()
сразу после получения Обещания от getJobs()
.Только когда это Обещание разрешено , вы получите что-нибудь полезное, поэтому вы хотите убедиться, что вы звоните console.log()
только после того, как Обещание было решено .
Вы можете сделать это с помощью оператора .then()
. Подробнее о них можно узнать здесь. Это позволяет вам обрабатывать этот код синхронно.Вам даже не нужно беспокоиться о том, чтобы сделать getJobs()
асинхронным (это может сделать код немного более запутанным, когда цепочка Promise отлично справляется с работой , на мой взгляд ).Я бы реализовал выше, как это:
function getJobs() {
var result = fetch('https://redhat.jobs/jobs/feed/json');
console.log('result inside getJobs is a Promise')
return(result)
}
getJobs().then(function(response){
return response.json();
})
.then(function(jobs){
console.log('result after promise chain is ' + jobs)
}
);