当前位置: 首页 > 知识库问答 >
问题:

拒绝(TypeError):无法读取未定义、未捕获(promise中)TypeError的属性“setState”:无法读取未定义的属性“setState”

洪祺
2023-03-14

我有一个简单的html" target="_blank">代码,但我收到(有时)错误的结果,这是因为nodejsasync,我知道。最后,我需要更新“this.setState({active:options})”。因此,为了解决NodeJS的异步问题,我使用了require(“异步”)库。但是现在我的简单代码变得相当复杂,结果也不是100%好。

同样在“函数道路”上,当我使用“this.setState({actove:options})”或“this.setState({actove:results.optionsFill})”时,我收到错误:“未处理的拒绝(TypeError):无法读取未定义的属性‘setState’”和“未捕获(promise中)TypeError:无法读取未定义的属性‘setState’”。

请参阅简单的开始代码(该代码计算地图的图例输入、数字周期的arr):

    setLegend(data){

        function roundingSize(number){
        }

        function rounding(number){
        }

        function stopsArrFill(jumpLegendValue, highestNumber){
        }

        // Searching for the highestNumber POPULATION
        var highestNumber = 0

        data.features.forEach(element => {
             var value = element.properties["POPULATION"]           
             if(highestNumber<value) highestNumber = value
        })

        // Need to round the number, so it will look nice on the legend
        highestNumber = roundingSize(highestNumber)

        // Searching for the LowestNumber POPULATION
        var LowestNumber = highestNumber

        data.features.forEach(element => {
            var value = element.properties["POPULATION"]
            if(LowestNumber>value) LowestNumber = value
        })

        // Need to round the number, so it will look nice on the legend
        LowestNumber = roundingSize(LowestNumber)

        // 7 because 1 element is 0 and the last is the highestNumber, so it gives 7 empty elements to fill
        var jumpLegendValue = Math.round(rounding((highestNumber - LowestNumber)/7))

        var tmpStops  = stopsArrFill(jumpLegendValue, highestNumber)

        const options = {
            name: 'Legenda',
            description: 'Liczba wystąpień',
            property: 'POPULATION',
            stops: tmpStops
        }

        this.setState({active: options})

现在async.auto的复杂代码:

    setLegend(data){

        function roundingSize(number){
        }

        function rounding(number){
        }

        function stopsArrFill(jumpLegendValue, highestNumber){
        }

        async.auto({

            highestNumber: function(callback){

                // Searching for the highestNumber POPULATION
                var highestNumber = 0

                data.features.forEach(element => {
                    var value = element.properties["POPULATION"]           
                    if(highestNumber<value) highestNumber = value
                })

                // Need to round the number, so it will look nice on the legend
                highestNumber = roundingSize(highestNumber)

                callback(null, highestNumber)
            },
            lowestNumber: ['highestNumber', function(results, callback){

                // Searching for the LowestNumber POPULATION
                var lowestNumber = results.highestNumber

                data.features.forEach(element => {
                    var value = element.properties["POPULATION"]
                    if(lowestNumber>value) lowestNumber = value
                })

                // Need to round the number, so it will look nice on the legend
                lowestNumber = roundingSize(lowestNumber)

                callback(null, lowestNumber)
            }],
            jumpLegendValue: ['highestNumber', 'lowestNumber', function(results, callback){

                // 7 because 1 element is 0 and the last is the highestNumber, so it gives 7 empty elements to fill
                var jumpLegendValue = Math.round(rounding((results.highestNumber - results.lowestNumber)/7))

                callback(null, jumpLegendValue)
            }],
            stopsArrFill:['highestNumber','jumpLegendValue', function(results, callback){

                // Filling the stops with jumpLegendValues
                var tmpStops  = stopsArrFill(results.jumpLegendValue, results.highestNumber)

                callback(null, tmpStops)
            }],
            optionsFill:['stopsArrFill', function(results, callback){

                const options = {
                    name: 'Legenda',
                    description: 'Liczba wystąpień',
                    property: 'POPULATION',
                    stops: results.stopsArrFill
                }      

                callback(null, options)
            }],
            function (err, results)
            {
                this.setState({active:results.optionsFill})
                console.log('error: ', err)
            }
        })

我现在玩这个2天了,你有什么想法/建议吗?我找不到任何类似的用法setState与async.auto.

共有1个答案

赵英资
2023-03-14

要解决setState问题,您需要知道async.auto({})是一个promise。

最终错误函数需要删除此代码

function (err, results)
{
    this.setState({active:results.optionsFill})
    console.log('error: ', err)
}

在async.auto({})末尾需要添加:

.then((result)=>{
    this.setState({active: result.optionsFill})
})
 类似资料:
  • 问题内容: 我试图在ajax回调从REST api接收数据后设置组件的setState。这是我的组件构造函数代码 然后,我有一个如下所示的方法。 现在,这是我执行getAJAX请求的getPosts函数。 我想设置状态,但出现以下错误。 不太清楚是什么原因造成的。如果有人指出我正确的方向,那将真的很有帮助。提前致谢。 问题答案: 还绑定回调函数,以便回调内部指向React Component的上下

  • 我正在使用一个面向对象的图表,并根据滚动位置设置数据。我使用d3.csv()加载then()的数据,如下所示: 对我来说,包含滚动库以及图表的所有代码是相当复杂的,所以我希望上面足够清楚。我的主要问题是调用在没有()显示图形,但返回标题中的错误。 我正在使用d3.v6,有人能帮忙吗?

  • 我目前正在尝试在reactJS中构建一个小型天气应用程序(freecodecamp的应用程序) 目前我收到错误:“UncaughtTypeError:无法读取未定义的属性'setState'” 以下是代码笔的链接:http://codepen.io/rasmus/pen/aNGRJm 下面是代码,我想这就是问题所在: url不是问题所在。我可以将接收到的数据记录到控制台。 我想这是因为的范围。。

  • 问题内容: 我收到以下错误 未捕获的TypeError:无法读取未定义的属性’setState’ 即使在构造函数中绑定了delta之后。 问题答案: 这是由于不受约束。 为了绑定设置在构造函数中: 当前,您正在调用绑定。但是bind返回一个绑定函数。您需要将函数设置为其绑定值。

  • 问题内容: 如果这个问题已经回答,我深表歉意。我尝试搜索解决方案,但找不到适合我的代码的任何解决方案。我还是jQuery新手。 对于两个不同的页面,我有两种不同类型的粘滞菜单。这是两者的代码。 我的问题是,底部粘性菜单的代码不起作用,因为第二行代码会引发错误,提示“未捕获的TypeError:无法读取未定义的属性’top’”。实际上,除非将第二行以下的其他jQuery代码放在第二行之上,否则根本不

  • 问题内容: 我收到此错误,它源自jquery框架。当我尝试在文档准备好加载选择列表时,出现此错误。我似乎找不到我为什么收到此错误的信息。 它适用于change事件,但是尝试手动执行功能时出现错误。 未捕获的TypeError:无法读取未定义的属性’toLowerCase’-> jquery-2.1.1.js:7300 这是代码 问题答案: 当您调用DOMReady时,的上下文将不是元素。 您可以通