-2
votes

Les fonctions asynchronisées peuvent-elles être dans des champs de classe?

Considérez l'extrait suivant:

p>

class Foo {
  async method() => {
    console.log('method');
  }
}
const f = new Foo();
f.method();


1 commentaires

Vous devriez certainement mentionner dans la question que vous avez le Utilisez Babel activé dans vos extraits. Votre code fonctionne bien sans elle. Centré SyntaxError: Inline Babel Script: Jeton inattendu (3:20)


3 Réponses :


2
votes

Q: Cela fonctionnerait-il pour vous:

class Foo {
  async method () {
    console.log('method');
  }
}
const f = new Foo();
f.method();


1 commentaires

Cela n'utilise pas de champ de classe, cependant, je demande ce qui ne va pas avec ma mise en œuvre. Je suis bien conscient de la façon d'utiliser une méthode normale dans une classe



1
votes

Selon Mozilla Cette syntaxe n'est pas pris en charge dans IE que je gousse que vous obtenez l'erreur là-bas, votre deuxième exemple de travail de travail en chrome.

p>

class Foo {
  method = async () => {
    console.log('method');
  }
}
const f = new Foo();
f.method();


4 commentaires

Tous les extraits sont transpilés. Si vous ouvrez cette page sur Internet Explorer, vous verrez les premier et troisième extraits qui travaillent comme vous le souhaitez.


Testé ce qui précède à IE 11 et il n'a pas fonctionné, et si vous lisez la compatibilité du navigateur, vous verrez que la dose de syntaxe ne supporte pas IE


@ Alen.toma op utilise un transpilateur (Babel) spécifiquement parce que de compatibilité du navigateur. C'est ce qu'un transpilateur fait.


@ Alen.toma Voir ma capture d'écran dans IE: ça marche comme prévu i.Stack.imgur.com/ Ouxip.png



3
votes

Les fonctions ASYNC peuvent-elles être dans les champs de classe? p>

oui. p>

p>

//Without BabelJS / ES2015
class Foo {
  method = async () => {
    console.log('method');
  }
}
const f = new Foo();
f.method();

2 commentaires

Donc, le transpilateur prend en charge les champs de classe, même s'ils sont uniquement à l'étape 3, (peut-être qu'ils seront intégrés à ES2020?) Bien que async n'est pas pris en charge, malgré l'être dans la spécification pendant un certain temps à présent? C'est surprenant, je m'attendais à ce que ce soit l'inverse. On dirait que le transpilateur ne prend pas en charge Fonctions asynchroniques ordinaires non plus.


Je suis d'accord avec vous sur les incohérences, mais je n'ai pas de bonne réponse pour cela malheureusement. Si je devais deviner , il utilise un plugin Babel qui permet aux propriétés de la classe (qui, à l'époque, était étape 1 ), comme indiqué sur Dans cet article de 2016 .