TypeError:(中间值)。那么不是一个函数

时间:2018-11-19 02:06:44

标签: javascript reactjs promise

我使用React 16,Babel 7,Webpack 4。

另一个项目正在工作,但是该项目没有工作。 错误是(中间值)。那么不是函数。 我不知道是什么问题... 嗯..如何解决这个问题? 请帮助我。

import React, { Component } from 'react';
// import throttle from 'lodash.throttle'
import debounce from 'lodash.debounce';


class Promise extends Component {
    constructor() {
        super();
        // this.handleDebounce = this.handleDebounce.bind(this);
    }
    handleDebounce = (e) => {
        // debounce(this.handleStart, 100); // 이런식으로 쓰면 안된다!! SyntheticEvent pooling (이벤트 풀링)  참고 https://reactjs.org/docs/events.html#event-pooling
        // 콜백함수는 해당 이벤트가 실행되는 동안에만 유효함
        this.setSearchTerm(e.target.value);
    }

    setSearchTerm = debounce((searchTerm) => this.handleStart(searchTerm), 2000);

    handleStart = (value) => {
        console.log("start", value)
        this.handlePromise1(value)
            .then(text => {
                console.log(text)
            })
            .catch((err) => {console.log("err", err)})
    }

    handlePromise1 = (value) => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                this.handlePromise2(resolve(value));
            }, 300);
        });
    }

    handlePromise2 = (value) => {
        return new Promise((resolve, reject) => {
            resolve(value);
        });
    }

    render() {
        return (
            <div>
                <input onKeyUp={this.handleDebounce}></input>
            </div>
        );
    }
}



export default Promise;

1 个答案:

答案 0 :(得分:1)

解决方案:(编辑1)

问题不是由于异步,而是由于在浏览器上覆盖Promise。新的Promise()实际上并没有创建预期的承诺。 选中here

不需要异步,如下所述:

陈旧答案(不正确):仅供参考: 我认为该问题是在handlePromise1声明期间缺少异步。因为它表示该函数是异步的,并且可能返回Promise作为返回值。如果未指定,则将其视为任何对象,然后.n可能不可用。

我刚刚添加了异步功能,并发现它可以在this code中工作

此外,@ bravo的评论有效。您不应尝试在任何JS代码中覆盖Promise