Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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_Promise - Fatal编程技术网

Javascript 如何在承诺中返回布尔值?

Javascript 如何在承诺中返回布尔值?,javascript,reactjs,promise,Javascript,Reactjs,Promise,在submitButton事件中,我想检查是否有注册的用户 假设注册了5个用户: getUsers = function () { return new Promise(function (resolve, reject) { resolve(5); reject(0); }); } 在checkregisteredUsers中,我调用getUsers,然后检查是否有任何用户。如果有任何用户,则返回true,否则返回false。我设置了UsersF

在submitButton事件中,我想检查是否有注册的用户

假设注册了5个用户:

 getUsers = function () {
    return new Promise(function (resolve, reject) {
      resolve(5);
      reject(0);
    });
  }
在checkregisteredUsers中,我调用getUsers,然后检查是否有任何用户。如果有任何用户,则返回true,否则返回false。我设置了UsersFound的状态

  checkRegisteredUsers = () => {
    return this.getUsers().then(result => {
      return this.setState({ UsersFound: result > 0 ? true : false };
    }).catch(reason => {
      console.log(reason);
    });
  }
现在,在函数submitButton中,我想检查是否有注册用户

submitButton = () => {
      this.checkRegisteredUsers().then(result => {
      this.setState({ UsersFound: result > 0 ? true : false });
    });

    if(!this.state.UsersFound){
    return; **//exit code here and the rest of the code below should not execute and show the dialog box**
    }
    // run some other code
  }
调用submitButton时,UsersFound的状态尚未设置。如果我第二次单击,则它已设置。 我怎样才能把它放在承诺里?或者,如何使用承诺检查submitButton中的true/false

编辑:

问题是:如何从承诺返回布尔值,因为我想检查如下内容:

submitButton = () => {
 if(this.checkRegisteredUsers()){
  return; //the rest of the code below should not execute
}
 //if check users is true then the code below should not execute
 // some other code
}

我不想要返回承诺,我想要一个布尔值。

长话短说:不能让返回承诺的函数返回布尔值。如果您有一些异步操作(比如从某个服务获取用户的fetch),那么这本质上就是异步的。您不能让这样的函数返回布尔值,因为在函数本身结束时,您没有返回true或false的信息

最接近的方法是使用async/await。但是异步函数仍然只返回
Promise
对象。您可以使用async/await使它看起来不同,但它只是语法上的糖分。在
wait
之后,您仍然有效地运行所有代码,就好像它是传递给
then
的函数一样

例如,这:

//Some function that will resolve or reject.
const getUsers = () {
  return new Promise(function (resolve, reject) {
    resolve(5);
  });
}
const foundUsers = async () => {
  const users = await getUsers();
  return Boolean(users);
}
const LoggedIn = () => {
  const [usersFound, setUsersFound] = useState(false)
  const onSubmit = async () => {
    const found = await foundUsers();
    if (found) {
      //do stuff
    }
    setUsersFound(found)
  }
  return (
    <>
      <button onClick={onSubmit}>Submit</button>
      { usersFound ? <Dialog /> : <WhateverElse /> }
    </>
  )
}
//将解析或拒绝的某个函数。
常量getUsers=(){
返回新承诺(功能(解决、拒绝){
决心(5);
});
}
const foundUsers=async()=>{
const users=wait getUsers();
返回布尔值(用户);
}
常数LoggedIn=()=>{
常量[usersFound,setUsersFound]=useState(false)
const onSubmit=async()=>{
const found=wait foundUsers();
如果(找到){
//做事
}
setUsersFound(已找到)
}
返回(
提交
{usersFound?:}
)
}
与此相同:

const LoggedIn = () => {
  const [usersFound, setUsersFound] = useState(false)
  const onSubmit = () => {
    foundUsers().then((found) => {
      if (found) {
        //do stuff
      }
      setUsersFound(found)
    })
  }
  return (
    <>
      <button onClick={onSubmit}>Submit</button>
      { usersFound ? <Dialog /> : <WhateverElse /> }
    </>
  )
}
constloggedin=()=>{
常量[usersFound,setUsersFound]=useState(false)
const onSubmit=()=>{
foundUsers()。然后((找到)=>{
如果(找到){
//做事
}
setUsersFound(已找到)
})
}
返回(
提交
{usersFound?:}
)
}

将逻辑放入其中,然后从
checkRegisteredUsers
方法中删除
然后
catch
回调。我建议使用
asyn/await
语句来处理异步函数。您是这样建议的:
checkRegisteredUsers=()=>{return this.getUsers();}
我仍然无法设置用户检查的状态。当我第一次点击按钮时,它仍然返回false。这个回答你的问题吗?其目的是,如果找到用户,则不执行代码insde submit按钮的其余部分。我该怎么做?这就是为什么我在这里尝试使用真-假。我将答案替换为我认为更好的答案,以回答您的问题“我如何从承诺中返回布尔值”。希望这更有意义。