如何在fetch函数中更新es6中的变量?

时间:2016-06-29 07:18:19

标签: json ecmascript-6 fetch let

我的代码如下:

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 个答案:

答案 0 :(得分:0)

fetch方法是异步的,实际上,在courses promise结算后,您只能访问fetch变量中的json内容。尝试执行以下操作:

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

使用Fetch 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);
});

我希望有所帮助!