javascript中带有类的异步函数

时间:2018-11-15 06:18:38

标签: javascript node.js asynchronous async-await ecmascript-2017

我已经在nodejs中创建了一个类

class ApnService {
  sendNotification(deviceType, deviceToken, msg, type, id) {
    try {
      const note = await apnProvider.send(note, deviceToken)
      console.log(note)
    } catch (err) {
      console.log(err)
    }
  }
}

export default ApnService

我需要做的是将上述函数转换为async。但是当我使用下面的语法时,它会抛出错误

SyntaxError: src/services/apn.js: Unexpected token (43:19)
  41 |   }
  42 | 
> 43 |   sendNotification = async(deviceType, deviceToken, msg, type, id) => {
     | 

               ^

下面是语法

class ApnService {
  sendNotification = async(deviceType, deviceToken, msg, type, id) => {
    try {
      const note = await apnProvider.send(note, deviceToken)
      console.log(note)
    } catch (err) {
      console.log(err)
    }
  }
}

export default ApnService

3 个答案:

答案 0 :(得分:5)

您只需在函数名称之前添加async即可将该函数声明为异步,

class ApnService {
  async sendNotification(deviceType, deviceToken, msg, type, id) {
    try {
      const note = await apnProvider.send(note, deviceToken)
      console.log(note)
    } catch (err) {
      console.log(err)
    }
  }
}

export default ApnService

答案 1 :(得分:2)

async是用于指定异步功能的关键字,请尝试

class ApnService {
    async sendNotification(deviceType, deviceToken, msg, type, id) { 
        try { 
            const note = await apnProvider.send(note, deviceToken) 
            console.log(note) 
        } catch (err) { 
            console.log(err) 
        } 
    }
 }
export default ApnService;

答案 2 :(得分:1)

class Foo {
    x = something
}

此分配是类字段的示例。 class property / class field语法的使用目前处于TC39流程的第3阶段,这意味着它尚未在ECMAScript中使用,并且尚未被所有JS引擎本地支持。可以通过Babel之类的编译器来使用它,但前提是您自己配置并运行这样的编译器。

幸运的是,您不需要类字段语法即可使类方法异步,只需使用async关键字即可。

class Foo {
    async myMethod () {/* ... */}
}