Javascript 为什么我的异步函数在尝试访问它时返回未定义的值?
很抱歉,我不太了解异步javascript,但我希望你能在这方面帮助我。我希望以异步方式从Wordpress rest API获得结果Javascript 为什么我的异步函数在尝试访问它时返回未定义的值?,javascript,async-await,Javascript,Async Await,很抱歉,我不太了解异步javascript,但我希望你能在这方面帮助我。我希望以异步方式从Wordpress rest API获得结果 async getResults() { let thePages = []; let thePosts = []; // GET PAGES await this.getJSON(`${schoolData.root_url}/wp-json/wp/v2/pages?search=${this.input.value}
async getResults() {
let thePages = [];
let thePosts = [];
// GET PAGES
await this.getJSON(`${schoolData.root_url}/wp-json/wp/v2/pages?search=${this.input.value}`, (err, pages) => {
if (err != null) {
console.error('Pages error: ', err);
} else {
thePages.push(pages);
console.log('This is from getResults function: ', pages);
}
});
// GET POSTS
await this.getJSON(`${schoolData.root_url}/wp-json/wp/v2/posts?search=${this.input.value}`, (err, posts) => {
if (err != null) {
console.error('Posts error: ', err);
} else {
thePosts.push(posts);
console.log('This is from getResults function: ', posts);
}
});
return this.createResults(thePosts, thePosts)
}
createResults(posts, pages) {
let thePosts = posts;
let thePages = pages;
console.log('This is from create results function: ', thePosts[0], thePages);
}
getJSON(url, callback) {
let xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'json';
xhr.onload = function () {
let status = xhr.status;
if (status === 200) {
callback(null, xhr.response);
} else {
callback(status, xhr.response);
}
};
xhr.send();
};
这是我的输出:
This is from create results function: undefined, []0: (4) [{…}, {…}, {…}, {…}]length: 1__proto__: Array(0)
This is from getResults function: (4) [{…}, {…}, {…}, {…}]
This is from getResults function: (2) [{…}, {…}]
我想从Results函数中获得类似的输出,现在我知道wait需要一个承诺。我更改了getJson函数,现在它返回一个承诺。(有效)
async getResults(){
让页面=等待this.httpGet(`${schoolData.root_url}/wp json/wp/v2/pages?search=${this.input.value}`);
让posts=wait this.httpGet(`${schoolData.root_url}/wp json/wp/v2/posts?search=${this.input.value}`);
返回this.createResults(JSON.parse(主题),JSON.parse(主题));
}
创建结果(帖子、页面){
this.resultsDiv.innerHTML=`
Новости :
${posts.length>0?':'
${posts.map(i=>`
`).join(“”)}
${posts.length>0?'
':''}
Страницы :
${pages.length>0?':'
${pages.map(i=>`
`).join(“”)}
${pages.length>0?'
':''}
`;
返回this.isspinervible=false;
}
httpGet(url){
返回新承诺(功能(解决、拒绝){
var xhr=new XMLHttpRequest();
xhr.open('GET',url,true);
xhr.onload=函数(){
如果(this.status==200){
解决(这个问题,回答);
}否则{
var error=新错误(this.statusText);
error.code=this.status;
拒绝(错误);
}
};
xhr.onerror=函数(){
拒绝(新错误(“网络错误”));
};
xhr.send();
});
}
yourgetResults
返回返回此值。createResults(posts,thePosts)
和createResults
不返回任何内容
async getResults() {
let thePages = await this.httpGet(`${schoolData.root_url}/wp-json/wp/v2/pages?search=${this.input.value}`);
let thePosts = await this.httpGet(`${schoolData.root_url}/wp-json/wp/v2/posts?search=${this.input.value}`);
return this.createResults(JSON.parse(thePosts), JSON.parse(thePages));
}
createResults(posts, pages) {
this.resultsDiv.innerHTML = `
<span class="search-content-title">Новости :</span>
${posts.length > 0 ? '<ul class="search-content-links">' : '<p class="err">Нет подходящих результатов</p>' }
${posts.map(i => `<li><a href="${i.link}">${i.title.rendered}</a></li>`).join('')}
${posts.length > 0 ? '</ul>' : ''}
<span class="search-content-title">Страницы :</span>
${pages.length > 0 ? '<ul class="search-content-links">' : '<p class="err">Нет подходящих результатов</p>' }
${pages.map(i => `<li><a href="${i.link}">${i.title.rendered}</a></li>`).join('')}
${pages.length > 0 ? '</ul>' : ''}
`;
return this.isSpinnerVisible = false;
}
httpGet(url) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onload = function() {
if (this.status == 200) {
resolve(this.response);
} else {
var error = new Error(this.statusText);
error.code = this.status;
reject(error);
}
};
xhr.onerror = function() {
reject(new Error("Network Error"));
};
xhr.send();
});
}