如何使用迭代器在 API 对象上使用 JavaScript 进行迭代?
How to iterate using iterator over API object using JavaScript?
我想通过 JavaScript 迭代器迭代 JSON 对象(数组)。我无法将从迭代器函数中获取的数据存储在变量中,以便我可以使用该变量进行 DOM 操作。
next.addEventListener('click',nextCV);
function nextCV(){
const a =getCV().then(data=>
data.next().value)
}
function getCV(){
return fetch(url).then(response=>{return response.json()
}).then(data=>{
return iteratorCV(data.results)
})
}
function iteratorCV(data){
console.log('inside iterator')
let nextindex=0;
return {
next: function(){
return nextindex<data.length ? {value: data[nextindex++], done:false} : {done:true};
}
};
}
这里我想在点击事件发生时,将下一个数组数据存储到变量'a'中。
请帮忙。
P.S。我还在学习中JavaScript.
您正在调用 getCV()
,它会在您每次单击该元素时重复请求并创建一个新的迭代器。听起来你真正想做的是
const iteratorPromise = getCV();
iteratorPromise.catch(console.error);
next.addEventListener('click', function nextCV(e) {
iteratorPromise.then(iterator => {
const a = iterator.next().value;
console.log(a); // or DOM manipulation
});
});
或
getCV().then(iterator => {
next.addEventListener('click', function nextCV(e) {
const a = iterator.next().value
console.log(a); // or DOM manipulation
});
}).catch(console.error);
我试图模拟 fetch
Promise,我认为这就是您要找的东西?当然可以进行优化,例如避免进行相同的 API 调用,而只是 return cached
结果取决于用例。
const btn = document.querySelector('button');
btn.addEventListener('click',nextCV);
async function nextCV(){
let it = await getCV();
let result = it.next();
const a = [];
while(!result.done) {
a.push(result.value)
result = it.next();
}
// Result stores in 'a'. Do DOM manipulation from here
console.log('final result', a);
}
function getCV(){
return new Promise((resolve) => {
setTimeout(() => {
resolve(iteratorCV([1,2,3,4,5]))
}, 1000)
})
}
function iteratorCV(data){
console.log('inside iterator')
let nextindex=0;
return {
next: function(){
return nextindex<data.length ? {value: data[nextindex++], done:false} : {done:true};
}
};
}
<button> Click </button>
感谢大家的宝贵意见 time.Here 是我获得决赛的方式 out.Hope 这对以后的人有帮助。
const url="https://.......";
//adding button for the iteration
const next = document.getElementById('next');
//for Dom manipulation
let image=document.getElementById('image');
let profile=document.getElementById('profile');
getCV().then(iterator => {
next.addEventListener('click', function nextCV(e) {
const a = iterator.next().value
console.log(a);
//now you can use the variable for DOM manipulation
image.innerHTML= });
})
//get api
function getCV(){
return fetch(url).then(response=>{
return response.json()
}).then(data=>{
console.log(data.results)
return iteratorCV(data.results);
})
}
//Iterating over the FETCHED DATA one by one data
function iteratorCV(data){
console.log('inside iterator')
// console.log(data)
let nextindex=0;
return {
next: function(){
return nextindex<data.length ? {value: data[nextindex++], done:false} : {done:true};
}
};
}
我想通过 JavaScript 迭代器迭代 JSON 对象(数组)。我无法将从迭代器函数中获取的数据存储在变量中,以便我可以使用该变量进行 DOM 操作。
next.addEventListener('click',nextCV);
function nextCV(){
const a =getCV().then(data=>
data.next().value)
}
function getCV(){
return fetch(url).then(response=>{return response.json()
}).then(data=>{
return iteratorCV(data.results)
})
}
function iteratorCV(data){
console.log('inside iterator')
let nextindex=0;
return {
next: function(){
return nextindex<data.length ? {value: data[nextindex++], done:false} : {done:true};
}
};
}
这里我想在点击事件发生时,将下一个数组数据存储到变量'a'中。 请帮忙。
P.S。我还在学习中JavaScript.
您正在调用 getCV()
,它会在您每次单击该元素时重复请求并创建一个新的迭代器。听起来你真正想做的是
const iteratorPromise = getCV();
iteratorPromise.catch(console.error);
next.addEventListener('click', function nextCV(e) {
iteratorPromise.then(iterator => {
const a = iterator.next().value;
console.log(a); // or DOM manipulation
});
});
或
getCV().then(iterator => {
next.addEventListener('click', function nextCV(e) {
const a = iterator.next().value
console.log(a); // or DOM manipulation
});
}).catch(console.error);
我试图模拟 fetch
Promise,我认为这就是您要找的东西?当然可以进行优化,例如避免进行相同的 API 调用,而只是 return cached
结果取决于用例。
const btn = document.querySelector('button');
btn.addEventListener('click',nextCV);
async function nextCV(){
let it = await getCV();
let result = it.next();
const a = [];
while(!result.done) {
a.push(result.value)
result = it.next();
}
// Result stores in 'a'. Do DOM manipulation from here
console.log('final result', a);
}
function getCV(){
return new Promise((resolve) => {
setTimeout(() => {
resolve(iteratorCV([1,2,3,4,5]))
}, 1000)
})
}
function iteratorCV(data){
console.log('inside iterator')
let nextindex=0;
return {
next: function(){
return nextindex<data.length ? {value: data[nextindex++], done:false} : {done:true};
}
};
}
<button> Click </button>
感谢大家的宝贵意见 time.Here 是我获得决赛的方式 out.Hope 这对以后的人有帮助。
const url="https://.......";
//adding button for the iteration
const next = document.getElementById('next');
//for Dom manipulation
let image=document.getElementById('image');
let profile=document.getElementById('profile');
getCV().then(iterator => {
next.addEventListener('click', function nextCV(e) {
const a = iterator.next().value
console.log(a);
//now you can use the variable for DOM manipulation
image.innerHTML= });
})
//get api
function getCV(){
return fetch(url).then(response=>{
return response.json()
}).then(data=>{
console.log(data.results)
return iteratorCV(data.results);
})
}
//Iterating over the FETCHED DATA one by one data
function iteratorCV(data){
console.log('inside iterator')
// console.log(data)
let nextindex=0;
return {
next: function(){
return nextindex<data.length ? {value: data[nextindex++], done:false} : {done:true};
}
};
}