Saya mahu panggilan balik dilaksanakan selepas findById, tetapi ia tidak boleh diletakkan dalam panggilan baliknya, jika tidak, ia akan dilaksanakan beberapa kali. Apa patut saya buat?
Software adalah industri perkhidmatan, anda mesti ada kesedaran perkhidmatan... Tiada masalah dengan peta kod, anda boleh melihatnya dengan jelas, tetapi jika responden ingin menukar kod anda, anda perlu menaipnya semula...
Saya nampak anda telah pun menggunakan sintaks es6, jadi penyelesaian yang betul mestilah Promise, yang boleh dimasukkan ke dalam Promies sendiri
Sudah tentu, anda juga boleh menggunakan fungsi alat yang disediakan oleh Bluebird untuk merangkum Promise
Perlu diingat bahawa anda menjalankan berbilang panggilan tak segerak di sini, jadi jika anda ingin mengembalikannya bersama-sama, mesti terdapat berbilang hasil. Oleh itu, beri perhatian kepada panggilan balik dalam then() selepas Promise.all. Promise.all 后面 then() 中的回调。
Jika anda ingin menggunakan es5, disyorkan anda menulis es6 dan kemudian menggunakan Babel. Walau bagaimanapun, Node 7.6+ sudah menyokong beberapa ciri es2017, jadi anda sebenarnya tidak perlu risau tentang isu ini. Jika anda benar-benar memerlukannya, gunakan kaedah mengira dalam panggilan balik findById untuk mengira pergerakan pembesaran (panggil panggilan balik). 🎜
🎜Pilihan 2🎜🎜
🎜Tambah User.findById pada tatasusunan dalam gelung, dan kemudian gunakan Promise.all dan panggilan balik untuk menulis dalam Promise.all () dalam .then(). 🎜
🎜🎜Pilihan 3🎜🎜
🎜Gunakan pembolehubah keadaan, semak setiap kali, dan kemudian laksanakan panggilan balik jika syarat dipenuhi. Kaedah hodoh, jangan gunakannya. 🎜
Saya nampak anda telah pun menggunakan sintaks es6, jadi penyelesaian yang betul mestilah Promise, yang boleh dimasukkan ke dalam Promies sendiri
Sudah tentu, anda juga boleh menggunakan fungsi alat yang disediakan oleh Bluebird untuk merangkum Promise
Perlu diingat bahawa anda menjalankan berbilang panggilan tak segerak di sini, jadi jika anda ingin mengembalikannya bersama-sama, mesti terdapat berbilang hasil. Oleh itu, beri perhatian kepada panggilan balik dalam
then()
selepasPromise.all
.Promise.all
后面then()
中的回调。如果你要用 es5,建议你写成 es6 再 Babel。不过 Node 7.6+ 已经支持 es2017 的一些特性,所以其实不必在意这个问题。如果确实需要,就采用在
Jika anda ingin menggunakan es5, disyorkan anda menulis es6 dan kemudian menggunakan Babel. Walau bagaimanapun, Node 7.6+ sudah menyokong beberapa ciri es2017, jadi anda sebenarnya tidak perlu risau tentang isu ini. Jika anda benar-benar memerlukannya, gunakan kaedah mengira dalam panggilan balikfindById
findById
untuk mengira pergerakan pembesaran (panggil panggilan balik). 🎜Pilihan 1
Gunakan
async/wait
. Ini membolehkan anda menggunakanUser.findById
secara serentak.async/await
。这样就可以按照同步方式使用User.findById
。方案二
在循环中把
User.findById
加入一个数组,然后用Promise.all
,callback
写在Promise.all().then()
中。方案三
使用一个状态变量,每次检查一下,满足条件再执行
🎜Pilihan 2🎜🎜 🎜Tambahcallback
User.findById
pada tatasusunan dalam gelung, dan kemudian gunakanPromise.all
danpanggilan balik
untuk menulis dalamPromise.all () dalam .then()
. 🎜 🎜🎜Pilihan 3🎜🎜 🎜Gunakan pembolehubah keadaan, semak setiap kali, dan kemudian laksanakanpanggilan balik
jika syarat dipenuhi. Kaedah hodoh, jangan gunakannya. 🎜Tetapkan parameter, laksanakan tetapan, dan kemudian masukkan penghakiman panggil balik setiap kali..
Untuk panggilan balik neraka, sila gunakan Janji atau perpustakaan yang serupa.
Penyelesaian saya agak rendah. . ?
Tingkat dua betul, gunakan janji untuk menyelesaikannya.