无法编辑全局变量内部函数

时间:2018-03-14 13:46:17

标签: javascript

我宣布全局变量str,然后在函数内编辑它,并尝试在该函数内调用它。但是,在调用时,它会返回''的初始全局值。



var str = '';
function getProjects(service) {
  //find all projects

    fetch(`http://localhost:8888/wp-json/wp/v2/projects?_embed`)
      // get the response as JSON
      .then(r => r.json())
      // go through the posts and append each posts' title to the HTML element
      .then(projects => {
        //for each project, find categories
        projects.forEach(project => {
          // find categories of each project
          project.categories.forEach(category => {
            // check if category name is equal to a service name
            fetch(`http://localhost:8888/wp-json/wp/v2/categories/${category}`)
              .then(r => r.json())
              .then(response => {
                if(serviceData[service].slug == response.slug) {
                  // if previous evaluates to true, add project to service
                  if(project._embedded['wp:featuredmedia']) {
                    str += `<div class='project-div'><a href='#'><img src='${project._embedded['wp:featuredmedia'][0].media_details.sizes.medium.source_url}' /><div class='bottom-text'>${project.title.rendered}</div></a></div>`;
                  }
                }
              })
          })
        })

      })
      .then(() => {
        document.getElementById('projects-container').innerHTML = str;
      })
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

在第2个then()处理程序中返回q0并将其作为第3个then()处理程序中的参数接受,如下所示

str

答案 1 :(得分:-2)

您应该使用常规for循环而不是forEach。数组原型原生的高阶函数与promisified函数不兼容。尝试将其更改为for循环,看看是否能解决问题。

此外,为了演示forEach如何破坏您的代码,在您追加到字符串后立即控制日志,然后在使用该编辑后的字符串之前控制台日志。很可能你会看到后一个控制台日志发生在forEach之前。