【问题标题】:TypeError : .next() is not a functionTypeError : .next() 不是函数
【发布时间】:2020-08-07 14:09:32
【问题描述】:
dataArr = []
let element;

function Users()
 {

    let url = 'https://randomuser.me/api'
    fetch(url).then((response) =>{
        return response.json();
    }).then((data) =>{
         
        dataArr.push(data['results']);
    })
}



for (let i = 0; i < 5; i++) {

    Users()
}

console.log(dataArr);


function profileIter(values) {

    let nextIndex = 0;
    if(nextIndex < values.length){
        return {
            value: values[nextIndex++],
            done: false
        }
    }
    else{
        return {
            done: true
        }
    }}


const CVIter = profileIter(dataArr);


console.log(CVIter.next().value);

运行后出现错误提示

CVIter.next() 不是函数

【问题讨论】:

  • profileIter 不返回具有next() 函数的对象
  • 把问题转过来... 为什么你期望next 成为那个对象的一个​​函数?您希望该功能做什么?
  • 我预测以后会有其他问题,fetch 是异步的,你会想知道为什么dataArr 是空的(只是为了让你有好的关键字来搜索这个多次被问到的问题)
  • 有一个函数 users 从 api 请求随机用户的数据我请求 5 次这样的数据并想要一个迭代器,以便我可以一个一个地记录用户的数据 - @David
  • @Nav:不。你收到错误是因为profileIter 返回一个没有next 函数的对象字面量。

标签: javascript iterator typeerror


【解决方案1】:

您的profileIter 函数返回的是IteratorResult 对象,而不是迭代器,因此next() 函数不存在。

如果你想获得一个迭代器,你必须让你的 profileIter 像这样的生成器:


function * profileIter(values) {
    for (let nextIndex = 0; nextIndex < values.length; ++nextIndex){
        yield values[nextIndex];
    }
}

或者让你的函数返回一个迭代器

function profileIter(values) {
    let nextIndex = 0;

    return {
        next: () => {
            if (nextIndex < values.length){
                return {
                    value: values[nextIndex++],
                    done: false
                };
            }

            return {
                done: true
            };
        },
    };
}

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 2023-02-21
    • 2020-05-28
    • 2016-12-28
    • 2021-11-17
    • 2019-04-22
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多