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

javascript类中的静态异步函数

javascript类中的静态异步函数,javascript,class,async-await,javascript-objects,Javascript,Class,Async Await,Javascript Objects,我在javascript类上使用静态异步方法时遇到问题。 如果我删除static关键字,那么在类中调用就可以了,但是我将无法使用类来调用它 我期望的结果是在类itselt上使用User.exist(email)和类ex.foo.exist(email)的实例上使用exist方法 我认为哪里错了 const userEmails = [] class User { constructor(fields) { this.email = fields.email; this.name

我在javascript类上使用静态异步方法时遇到问题。 如果我删除static关键字,那么在类中调用就可以了,但是我将无法使用类来调用它

我期望的结果是在类itselt上使用User.exist(email)和类ex.foo.exist(email)的实例上使用exist方法

我认为哪里错了

const userEmails = []

class User {
  constructor(fields) {
   this.email = fields.email;
   this.name = fields.name;
  }

  static async exist(email) {
    return setTimeout(function() {
      return userEmails.includes(email)
    }, 2000)
  }

  async storeEmail() {
    let userExist = await this.exist(this.email)

    if (userExist) {
      console.log('User exist')
    } else {
      users.push(this.email)
      console.log(userEmails)
    }
  }
};

let foo = new User({email: 'foo@bar.com', name: 'Foo Bar'})

foo.storeEmail()           // this.exist is not a function
User.exist('foo@bar.com')  // Works when used inside async function with await

当您将类的方法定义为静态成员时,它在使用
this
关键字的实例上不可用。您可以使用类函数中的类名直接调用它,如
User.exist(this.email)

const userEmails=[]
类用户{
构造函数(字段){
this.email=fields.email;
this.name=fields.name;
}
静态异步存在(电子邮件){
返回setTimeout(函数(){
返回用户电子邮件。包括(电子邮件)
}, 2000)
}
async storeEmail(){
let userExist=等待User.exist(this.email)
if(userExist){
console.log('用户存在')
}否则{
users.push(this.email)
console.log(用户电子邮件)
}
}
};
让foo=新用户({email:'foo@bar.com,名称:'Foo-Bar'})
foo.storeEmail()//this.exist不是函数

User.exist('foo@bar.com“)//在异步函数中与一起使用时起作用。
您需要在静态上下文中调用静态函数,因此
User.exist()
而不是
this.exist()

const userEmails=[]
类用户{
构造函数(字段){
this.email=fields.email;
this.name=fields.name;
}
静态异步存在(电子邮件){
返回setTimeout(函数(){
返回用户电子邮件。包括(电子邮件)
}, 2000)
}
async storeEmail(){
let userExist=等待User.exist(this.email)
if(userExist){
console.log('用户存在')
}否则{
users.push(this.email)
console.log(用户电子邮件)
}
}
};
让foo=新用户({email:'foo@bar.com,名称:'Foo-Bar'})
foo.storeEmail();//好啊

User.exist('foo@bar.com'); // 好的
那很容易…:)谢谢很高兴能帮上忙:-)谢谢你抽出时间!Shubham快了一点,他会得到答案的。