Асинхронная функция с классом в JavaScript - PullRequest
0 голосов
/ 15 ноября 2018

Я создал класс в 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 голосов
/ 15 ноября 2018
class Foo {
    x = something
}

Это назначение является примером поля класса. Использование синтаксиса свойство класса / поле класса в настоящее время находится на стадии 3 в процессе TC39, то есть он еще не в ECMAScript и еще не поддерживается изначально всеми механизмами JS. Его можно использовать через транспортеры, такие как Babel , но только если вы сами настроите и запустите такой транспортер.

К счастью, вам не нужен синтаксис поля класса, чтобы сделать метод класса асинхронным, вы можете просто использовать ключевое слово async.

class Foo {
    async myMethod () {/* ... */}
}
0 голосов
/ 15 ноября 2018

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;
0 голосов
/ 15 ноября 2018

Вы можете просто добавить асинхронный код перед именем функции, чтобы объявить эту функцию асинхронной,

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
...