javascript 未定义的Promise Rejection不是函数

yqkkidmi  于 2023-08-02  发布在  Java
关注(0)|答案(2)|浏览(105)

我使用React Native。我已经检查了What is an unhandled promise rejection?,但我根本看不懂。
创建组件时:

render(){
    const MenuComponent = (
      <MenuScreen CloseSlideMenu={this.SlideMenu.CloseSlideMenu} />
    )
    ...
}

字符串
我得到以下错误:
'可能的未处理Promise拒绝(id:0)TypeError:undefined不是函数(正在计算'_this.OpenSlideMenu.bind(true).then(function(){})'
this.OpenSlideMenu()constructor()中声明。

constructor (props, context) {
  super(props, context)

  this.OpenSlideMenu = this.OpenSlideMenu.bind(true).catch(function(e){
    console.log("Promise Rejected");
  });
  this.CloseSlideMenu = this.CloseSlideMenu.bind(true).catch(function(e){
    console.log("Promise Rejected");
  });
}


这个.drawer在render()方法中声明:

render () {
  const MenuComponent = (
    <MenuScreen CloseSlideMenu={this.SlideMenu.CloseSlideMenu} />
  )

  return (
    <Drawer
      ref={(ref) => this.drawer = ref}
      content={MenuComponent}
      tapToClose={true}
      openDrawerOffset={170}
      stles={drawerStyles}
      panCloseMask={0.2}
      closedDrawerOffset={-3}
      styles={drawerStyles}
      tweenHandler={(ratio) => ({
        main: { opacity: (2-ratio)/2 }
      })}>
      <GroceryScreen selectedCategory='Todos' OpenSlideMenu={this.OpenSlideMenu} />
    </Drawer>
  )
}

有人能解释一下为什么我有这个错误吗?我该怎么解决这个问题?

i2byvkas

i2byvkas1#

有几件事不对劲。您正在使用.bind(true)绑定一个布尔值作为函数的this上下文。
在函数声明中也使用了.catch().then().catch()用于函数调用。
同样,如果这是函数的初始声明,那么在声明它之前,您正在尝试对它进行.bind()。你需要先申报。
我建议你在MDN上阅读有关.bind()Promise的内容。
这里有一个小例子,希望能帮助你理解这些原则:

class Demo extends PureComponent {
    constructor( props ) {
        // allow the user this in constructor
        super( props );

        // set default state
        this.state = {
            text: "Awaiting data..."
        }

        // only needed if used in a callback
        this.method = this.method.bind( this );
    }

    componentDidMount() {
        // calling the method that returns a promise when component mounts
        this.method()
            .then((res) =>{
                // set state in a non-mutating way
                this.setState({text: res});
            });
    }

    // declaring a method to handle the api call
    // yours will not be named method
    method() {
        return new Promise(
            (resolve, reject) => {
                // simulating network delay of 2 seconds ( lets hope not! )
                setTimeout(() => {
                    resolve( "Data returned from promise" );
                }, 2000 );
            });
        );
    }

    render() {
        // destructure the text var from data
        const { text } = this.state;
        // return text
        return (
            <p>{ text }</p>
        );
    }
};

字符串

bttbmeg0

bttbmeg02#

我得到了一个类似的错误,但原因不同:使用useContext从Context文件导入异步函数“myFunc”。
我的错误:未处理的Promise拒绝不是一个函数,而是一个Promise的示例。

const {
    state: { some, stuff }, myFunc,
} = useContext(SomeContext);

字符串
当调用不带参数/变量的“myFunc”时,不要包含括号。将const output = await myFunc();更改为const output = await myFunc;为我修复了它。

相关问题