Javascript 可能的错误未处理承诺拒绝(React和Class)

Javascript 可能的错误未处理承诺拒绝(React和Class),javascript,reactjs,react-native,promise,callback,Javascript,Reactjs,React Native,Promise,Callback,我希望在类中使用一个承诺,并依赖于是否解析或拒绝我的组件的类的另一个方法。 这里我留下一个密码 var promise = new Promise( (resolve, reject) => { let name = 'DaveA' if (name === 'Dave') { resolve("Promise resolved successfully"); } else { reject(Error("Promise

我希望在类中使用一个承诺,并依赖于是否解析或拒绝我的组件的类的另一个方法。 这里我留下一个密码

var promise = new Promise( (resolve, reject) => {

  let name = 'DaveA'

  if (name === 'Dave') {
     resolve("Promise resolved successfully");
  }
  else {
     reject(Error("Promise rejected"));
  }
});

class App extends React.Component
{
  constructor(props){
    super(props);
    this.state = {
      name: '',
    }
   
  }
  Bien(result){
    alert("OK")
    this.setState({name: result});
  }
  Mal(error){
    alert("FALLO")
    this.setState({name: error});
  }
  componentDidMount() {
  
 
    let obj = {newName: ''};
   
    promise.then( result => {
     this.Bien(result)
  
    }, function(error) {
      this.Mal(error)
  
    });
我创造了一个简单的承诺。 我称之为来自组件的。 在我调用另一个方法之后。 但从来没有这样做过。 出现错误:

 WARN     Possible Unhandled Promise Rejection (id: 0):
TypeError: this.Mal is not a function. (In 'this.Mal(error)', 'this.Mal' is undefined)
请使用
.catch()
,如下所示:

componentDidMount() {
    let obj = {newName: ''};
    promise.then(result => {
     this.Bien(result)
    })
    .catch((error) => {
      this.Mal(error)
    });
  }
因此,总代码应如下所示:

import React, { Component } from 'react';

var promise = new Promise((resolve, reject) => {
    let name = 'DaveA'
    if (name === 'Dave') {
      resolve("Promise resolved successfully");
    }
    else {
      reject(Error("Promise rejected"));
    }
  });

class App extends React.Component
{
  constructor(props){
    super(props);
    this.state = {
      name: '',
    }
  }

  Bien(result) {
    alert("OK")
    this.setState({name: result});
  }

  Mal(error) {
    alert("FALLO")
    this.setState({name: error});
  }

  componentDidMount() {
    let obj = {newName: ''};
    promise.then(result => {
     this.Bien(result)
    })
    .catch(error => {
      this.Mal(error)
    });
  }

  render() {
    return <></>
  }
}

export default App;
import React,{Component}来自'React';
var承诺=新承诺((解决、拒绝)=>{
让name='DaveA'
如果(姓名=='Dave'){
解决(“承诺成功解决”);
}
否则{
拒绝(错误(“拒绝承诺”);
}
});
类应用程序扩展了React.Component
{
建造师(道具){
超级(道具);
此.state={
名称:“”,
}
}
边(结果){
警报(“正常”)
this.setState({name:result});
}
错误(错误){
警报(“法洛”)
this.setState({name:error});
}
componentDidMount(){
设obj={newName:''};
承诺。然后(结果=>{
本.边(结果)
})
.catch(错误=>{
这个.Mal(错误)
});
}
render(){
返回
}
}
导出默认应用程序;

它在“react”上正常工作:“16.12.0”。结果警告构造函数中的“FALLO”。

添加this.Mal=this.Mal.bind(this)删除函数(error){…}部分,并在promise.then()的结尾部分添加.catch()。请检查下面的答案。不,不要使用
catch
,特别是在OP的情况下。如果没有catch,你就不能使用它。当然你可以。注意,
catch
只是另一个
调用的别名,然后
调用处理程序作为第二个参数。