Problème : Tentative d'utilisation de la syntaxe async/wait dans un La fonction constructeur génère l'erreur "Le constructeur de classe n'est peut-être pas asynchrone". méthode."
Cause : Les fonctions asynchrones renvoient des promesses, tandis que les constructeurs renvoient l'objet en cours de construction. Cela crée un conflit, rendant impossible l'utilisation simultanée d'async/wait et de constructeurs.
Solutions de contournement :
1. Fonction d'initialisation (init()) :
Utilisation :
var myObj = new myClass(); myObj.init(function() { // Use myObj within the callback });
Mise en œuvre :
class myClass { constructor () { } init (callback) { // Asynchronous operations and callback } }
2. Modèle de constructeur :
Utilisation :
myClass.build().then(function(myObj) { // Use myObj }); async function foo () { var myObj = await myClass.build(); }
Mise en œuvre :
class myClass { constructor (async_param) { if (async_param === undefined) { throw new Error('Cannot be called directly'); } } static build () { return doSomeAsyncStuff() .then(function(async_result){ return new myClass(async_result); }); } // Async/await equivalent: static async build () { var async_result = await doSomeAsyncStuff(); return new myClass(async_result); } }
Remarque : Les constructeurs peuvent utiliser des rappels au lieu de promesses.
Appel de fonctions au sein de fonctions statiques :
Pour appeler des méthodes d'instance à partir de fonctions statiques, faites-les soit fonctions régulières ou méthodes statiques.
class A { static foo () { bar1(); // OK A.bar2(); // OK } static bar2 () {} } function bar1 () {}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!