我宣布全局变量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;
答案 0 :(得分:0)
在第2个then()处理程序中返回q0
并将其作为第3个then()处理程序中的参数接受,如下所示
str
答案 1 :(得分:-2)
您应该使用常规for循环而不是forEach。数组原型原生的高阶函数与promisified函数不兼容。尝试将其更改为for循环,看看是否能解决问题。
此外,为了演示forEach如何破坏您的代码,在您追加到字符串后立即控制日志,然后在使用该编辑后的字符串之前控制台日志。很可能你会看到后一个控制台日志发生在forEach之前。