Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查空对象并返回布尔值_Javascript_Reactjs - Fatal编程技术网

Javascript 检查空对象并返回布尔值

Javascript 检查空对象并返回布尔值,javascript,reactjs,Javascript,Reactjs,我有一个AddContactForm表单,允许用户添加contacts 当用户填写conactNumber-onBlur时,它会检查此conactNumber是否已经存在 如何使CheckIfContactExists函数返回true或false而不是promise对象 请注意,我无法更改api返回的值,它只返回一个contact对象 export default class AddContactForm extends Component { state = { ... };

我有一个
AddContactForm
表单,允许用户添加
contacts

当用户填写
conactNumber
-
onBlur
时,它会检查此
conactNumber
是否已经存在

如何使
CheckIfContactExists
函数返回
true
false
而不是promise对象

请注意,我无法更改api返回的值,它只返回一个
contact
对象

export default class AddContactForm extends Component {
  state = {
   ...
  };

  checkContact = () => {
    const { contactNumber } = this.state.newContactInfo;
    CheckIfContactExists(contactNumber); //return promise
  };

 render() {
   ...
    return (  
       ...
   );
  }
}

const CheckIfContactExists = async searchString => {
  const { data: contactsInfo } = await axios.get(`api/Contacts/SearchContact?contactNum=${searchString}`);
};

在checkContact中使用async Wait,就像您对
CheckIfContactExists
所做的那样。还可以从
CheckIfContactExits
方法返回布尔结果

export default class AddContactForm extends Component {
  state = {
   ...
  };

  checkContact = async () => {
    const { contactNumber } = this.state.newContactInfo;
    try {
      const res = await CheckIfContactExists(contactNumber); 
      return res;
    } catch (e) {
       console.log('Error', error);
    }
  };

 render() {
   ...
    return (  
       ...
   );
  }
}

const CheckIfContactExists = async searchString => {
  const { data: contactsInfo } = await axios.get(`api/Contacts/SearchContact?contactNum=${searchString}`);
  if (Object.keys(contactsInfo).length > 0) {
     return true;
  } else {
      return false;
  }
};

您不能让它只返回布尔值,因为它是一个异步操作。您还可以使
checkContact
功能
async
,并
等待它

示例

export default class AddContactForm extends Component {
  state = {
   // ...
  };

  checkContact = async () => {
    const { contactNumber } = this.state.newContactInfo;
    const contactInfo = await CheckIfContactExists(contactNumber);

    this.setState({
      contactNumberTaken: Object.keys(contactInfo).length !== 0
    });
  };

  render() {
    // ...
  }
}

你不能,这是异步调用返回承诺时的情况,你可以将承诺解析为布尔值,但它仍然是一个承诺谢谢你的回答,但是
if(contactsInfo)
将总是结果
true
,没有分配任何属性的对象不被视为“空”。在这种情况下,只需检查对象键的大小即可。当我写下答案时,我的假设是contactsInfo返回未定义或null(如果找不到的话)。谢谢你的回答,但是
Boolean(contactsInfo)
将始终导致
true
,没有分配任何属性的对象不会被认为是“空的”。@user3378165这是真的。我更新了答案,检查返回的是不是空对象。