在节点js中的函数调用响应后执行代码

时间:2018-10-13 10:08:44

标签: javascript node.js express

我是Nodejs和Express的初学者。 我需要调用一个函数,执行后需要继续响应。在此过程中使用了 promise (承诺),但它无法正常工作。 我的代码是

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
};

我正在调用 getArea 函数内的 saveZone 函数。需要等待响应,然后确定while循环是否需要退出。提到了很多关于stackoverflow的问题,但是我还是不能。请帮助我解决这个问题

1 个答案:

答案 0 :(得分: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"
                     }); 
            });

    }

}

希望这会有所帮助!