Je souhaite que le rappel soit exécuté après findById, mais il ne peut pas être placé dans son rappel, sinon il sera exécuté plusieurs fois. Que dois-je faire?
Le logiciel est une industrie de services, vous devez avoir une conscience du service... Il n'y a aucun problème avec la carte du code, vous pouvez le voir clairement, mais si le répondant veut changer votre code, vous devez le retaper...
Je vois que vous avez déjà utilisé la syntaxe es6, la bonne solution doit donc être Promise, qui peut être encapsulée dans Promies par vous-même
Bien sûr, vous pouvez également utiliser les fonctions d'outils fournies par Bluebird pour encapsuler Promise
Il convient de noter que vous exécutez ici plusieurs appels asynchrones, donc si vous souhaitez les renvoyer ensemble, il doit y avoir plusieurs résultats. Faites donc attention au rappel dans then() après Promise.all. Promise.all 后面 then() 中的回调。
Si vous souhaitez utiliser es5, il est recommandé d'écrire es6 puis d'utiliser Babel. Cependant, Node 7.6+ prend déjà en charge certaines fonctionnalités d'es2017, vous n'avez donc pas réellement à vous soucier de ce problème. Si vous en avez vraiment besoin, utilisez la méthode de comptage dans le rappel findById pour compter les mouvements d'agrandissement (appelez le rappel). 🎜
🎜Option 2🎜🎜
🎜Ajoutez User.findById à un tableau dans la boucle, puis utilisez Promise.all et callback pour écrire dans Promise.all () dans .then(). 🎜
🎜🎜Option 3🎜🎜
🎜Utilisez une variable d'état, vérifiez-la à chaque fois, puis exécutez callback si les conditions sont remplies. Méthode laide, ne l'utilisez pas. 🎜
Je vois que vous avez déjà utilisé la syntaxe es6, la bonne solution doit donc être Promise, qui peut être encapsulée dans Promies par vous-même
Bien sûr, vous pouvez également utiliser les fonctions d'outils fournies par Bluebird pour encapsuler Promise
Il convient de noter que vous exécutez ici plusieurs appels asynchrones, donc si vous souhaitez les renvoyer ensemble, il doit y avoir plusieurs résultats. Faites donc attention au rappel dans
then()
aprèsPromise.all
.Promise.all
后面then()
中的回调。如果你要用 es5,建议你写成 es6 再 Babel。不过 Node 7.6+ 已经支持 es2017 的一些特性,所以其实不必在意这个问题。如果确实需要,就采用在
Si vous souhaitez utiliser es5, il est recommandé d'écrire es6 puis d'utiliser Babel. Cependant, Node 7.6+ prend déjà en charge certaines fonctionnalités d'es2017, vous n'avez donc pas réellement à vous soucier de ce problème. Si vous en avez vraiment besoin, utilisez la méthode de comptage dans le rappelfindById
findById
pour compter les mouvements d'agrandissement (appelez le rappel). 🎜Option 1
Utilisez
async/await
. Cela vous permet d'utiliserUser.findById
de manière synchrone.async/await
。这样就可以按照同步方式使用User.findById
。方案二
在循环中把
User.findById
加入一个数组,然后用Promise.all
,callback
写在Promise.all().then()
中。方案三
使用一个状态变量,每次检查一下,满足条件再执行
🎜Option 2🎜🎜 🎜Ajoutezcallback
User.findById
à un tableau dans la boucle, puis utilisezPromise.all
etcallback
pour écrire dansPromise.all () dans .then()
. 🎜 🎜🎜Option 3🎜🎜 🎜Utilisez une variable d'état, vérifiez-la à chaque fois, puis exécutezcallback
si les conditions sont remplies. Méthode laide, ne l'utilisez pas. 🎜Définissez un paramètre, exécutez le réglage, puis saisissez le jugement de rappel à chaque fois..
Pour l'enfer des rappels, veuillez utiliser Promise ou des bibliothèques similaires.
Ma solution est un peu faible. . ?
Le deuxième étage est correct, utilisez la promesse pour le résoudre.