Выполнить код после ответа на вызов функции в узле js

1

Я новичок в Nodejs и выражаю. Мне нужно вызвать функцию, и после ее выполнения необходимо выполнить ответ. Б обещание для этого процесса, но это не будет работать. Мой код

var NodeGeocoder = require('node-geocoder');
const Promise = require('bluebird');
var geocoder = NodeGeocoder(options);

function getArea(req, res) {

   let row=1;
   let col=1;
   let startingLat = req.body.starting_lat;
   let startingLng = req.body.starting_lng;
   let distance = req.body.distance;
   var resp = false;
   while(resp !=true){ 
     let input = [];
     input.lat = startingLat;
     input.lng = startingLng;
     input.distance = distance;
     input.row = row;
     input.col = col;
     saveZone(input).then(function(responsse,err)  {                
                if(responsse){
                    //some code 
                    row++;                   
                }

            }).catch(function (err) {                    
                console.log('error',err);                    
            });

    }
    res.json({
            status: 200,
            message: "success"
        });

}

function saveZone(input, callback) {

    return new Promise((resolve, reject) => {
      // some code      
      resolve(result);
    }
}

/**
Export all methods
*/
module.exports = {
  getArea: getArea,
  saveZone:saveZone
};

Я вызываю функцию saveZone внутри функции getArea. Необходимо подождать ответа, а затем определить, должен ли цикл while выйти. Написал много вопросов о stackoverflow, но все же я не могу. Пожалуйста, помогите мне решить эту проблему.

  • 0
    В этом случае либо вы должны использовать async await функцию или вы должны поставить res.json внутри then функция saveZone .
Теги:
express

1 ответ

0

Ваш ответ вернется, прежде чем даже обещание будет разрешено, вам придется ждать обещания вернуть ответ, если вы хотите ответа только после разрешения обещания. Вы найдете следующий код:

function getArea(req, res) {
      // ... your code
     saveZone(input).then(function(responsse,err)  {                
                if(responsse){
                     res.json({
                        status: 200,
                        message: "success"
                     });               
                }

            }).catch(function (err) {                    
                res.json({
                        status: 500,
                        message: "error"
                     }); 
            });

    }

}

Надеюсь это поможет !!

  • 0
    Мне нужно вызвать функцию saveZone несколько раз в while цикла до возвращения ответа и после некоторых условий возврата верно. после этого только я могу использовать res.json

Ещё вопросы

Сообщество Overcoder
Наверх
Меню