2016-06-29 3 views
0

У меня есть этот код ниже:Как обновить переменную в es6 внутри функции выборки?

let courses = ''; 

fetch(link) 
.then(function(response) { 
    return response.json(); 
}).then(function(json) { 
    courses = json; 
}).catch(function(ex) { 
    console.log('parsing failed', ex); 
}); 

Использование console.log(courses) распечатывает ''.

Как установить его на извлеченный json?

+1

'fetch' всегда асинхронный, то есть любой синхронный код, размещенный впоследствии, будет * всегда * исполняться до вызова обратного вызова fetch.then'. – nils

+0

Итак, как мне выполнить этот синхронный код после извлечения? –

+1

@JoshuaRajandiran: Просто положите его на обратный вызов – Bergi

ответ

0

fetch является асинхронным, по существу, вы будете иметь доступ только к содержанию JSon в переменной courses после fetchpromise решает. Попробуйте сделать следующее:

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); 
}); 

Надеюсь, что это поможет!

+0

' synchronouslyParse' и 'synchronousConsole' являются неправильными ... – nils

+0

@nils Возможно ... Не стесняйтесь редактировать мой пост! –