Невозможно синхронно выполнять задачи в node.js

Я полный новичок в node.js, поэтому, пожалуйста, извините меня, если мой вопрос глупый. На самом деле я пытаюсь сделать, я получаю список с помощью асинхронной функции от mongodb и пытаюсь распечатать его после того, как я получу Полный список.Хотя я получаю список правильно, но не знаю, почему он выводит результат как null. Даже я думал, что это может быть ошибка Promise, поэтому я попытался использовать модуль sync, но без изменений в результате. кто-нибудь, пожалуйста, помогите мне исправить эту ошибку.

Код:

MongoClient.connect(url,function(err,db){
               if (err) throw err;

              var arr=[]
               getBlocker().then(()=>showList())

               Sync(()=>{
                getBlocker()
                showList()
               })

               function getBlocker(){
                return new Promise(resolve=>{
                    var blQ = {blocked_user:data.tag_search_mail} 

         db.collection("block_list").find(blQ,{"_id":0}).toArray((err,res)=>{

                             for(let i=0;i<res.length;i++){
                                 arr.push(res[i]["blocker"])
                                 console.info(res[i]["blocker"])//but here it's printing the result correctly that means I'm getting result
                             }

                       })
                     resolve() 
                })   

            }
            function showList(){
                console.info(arr)//Here it's printing []
            }
        })

Асинхронные результаты НЕ МОГУТ быть возвращены синхронно (что вы и пытаетесь сделать). Это вопрос времени. Ваша функция возвращается ДО того, как будут доступны асинхронные результаты, поэтому вы увидите пустой массив.

jfriend00 31.03.2018 17:36

Кроме того, if (err) throw err; внутри асинхронного обратного вызова НИКОГДА не является правильным кодом. Вам нужно написать реальную обработку ошибок, сообщая результаты ошибки вызывающей стороне через обещание или обратный вызов.

jfriend00 31.03.2018 17:37

@ jfriend00, сэр, не могли бы вы подвести меня к правильному ответу?

anonymous 31.03.2018 17:42

В ответе ВСЕ объясняется, что вас пометили как обман. Это часто задаваемый вопрос, и этот другой ответ полностью объясняет проблему.

jfriend00 31.03.2018 17:43

@ jfriend00, сэр, извините, что снова побеспокоил вас, несмотря на этот тупик. Ответ объясняет все, но, поскольку я новичок, я не знаю, как реализовать обратный вызов в моем случае. Было бы здорово, если бы вы уделили немного времени написанию кода для моего случая.

anonymous 31.03.2018 18:02

Во-первых, вам, вероятно, следует использовать обещание вместо простого обратного вызова, поскольку это современный способ делать асинхронные вещи в node.js. Во-вторых, в вашем ответе есть примеры реализации как обратных вызовов, так и обещаний. Если вы напишете какой-то код, чтобы следовать этим примерам, и при этом застряли, вам следует написать новый вопрос и опубликовать код, который вы пробовали, и объяснить, где вы застряли. У нас нет причин восстанавливать все ранее пройденные пути.

jfriend00 31.03.2018 18:07

@ jfriend00 хорошо, спасибо

anonymous 31.03.2018 18:09

@ jfriend00, сэр, не могли бы вы проверить мой вопрос

anonymous 31.03.2018 19:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
16
0

Другие вопросы по теме