web-dev-qa-db-fra.com

fonction asynchrone avec la classe en javascript

J'ai créé une classe dans 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

Ce que je dois faire est de convertir la fonction ci-dessus en async. Mais quand j'utilise la syntaxe ci-dessous, cela me jette une erreur

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

               ^

Voici la syntaxe

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
6
Dark Knight

Vous pouvez simplement ajouter async avant le nom de la fonction pour déclarer cette fonction comme 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
3
Aniket Pawar

async est un mot-clé pour désigner une fonction asynchrone, essayez

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
Drew Reese
class Foo {
    x = something
}

Cette affectation est un exemple de champ de classe. L'utilisation de la syntaxe propriété de classe/champ de classe est actuellement à l'étape 3 du processus TC39, ce qui signifie qu'elle n'est pas encore dans ECMAScript et n'est pas encore prise en charge en mode natif par tous les moteurs JS. Il peut être utilisé via des transpilateurs comme Babel , mais uniquement si vous configurez et exécutez un tel transpilateur vous-même.

Heureusement, vous n'avez pas besoin de la syntaxe des champs de classe pour rendre une méthode de classe asynchrone, vous pouvez simplement utiliser le mot clé async.

class Foo {
    async myMethod () {/* ... */}
}
1
Gabriel L.