2014-05-07 114 views
0

这是我的代码。请帮帮我。从回调函数返回预算如何值主函数。返回主函数的回调值

如何返回值的主要功能

//Метод возвращает текущий бюджет пользователя 
    getCurrentBudget: function (req) { 
     var reqToken = req.headers["authorization"].substr(7); 
     var is = true; 

     jwt.verify(reqToken, config['jwt'], function (error, user) { 
      // Если бюджет текущего пользователя 
      if (user.currentBudget) { 
       db.budget.findOne({ownerId: objectId(user._id)}, function(error, budget) { 
        if (!error && budget) { 
         //Бюджет найден 
         logger.debug('Бюджет найден: %j', budget, {}); 
         return budget; 
        } 
       }) 
      } else { 
       // Ищем бюджет в который пригласили этого пользователя 
       db.budget.findOne({membersEmail: user.email}, function(error, budget) { 
        if (!error && budget) { 
         //Бюджет найден 
         logger.debug('Бюджет найден: %j', budget, {}); 
         return budget; 
        } 
       }) 
      } 
     }); 
    }, 
+0

'getCurrentBudget( )'应该声明为'var getCurrentBudget = function(){...};'对于初学者。 – JayRow

+0

不可能。主函数在调用回调之前就存在。做一个搜索,你会发现数百个其他问题,询问如何从回调或AJAX请求中返回一个值。那里的解决方案将会有所帮助。基本上你不会将数据返回到代码中,而是将代码传递给数据。 –

+0

您也可以使用承诺框架/库(如q,请参阅https://github.com/kriskowal/q),以使代码更健壮。无论哪种方式,您都需要使用回调函数,正如下面的答案中所建议的,因为您正在处理异步JavaScript。 –

回答

1

因为你调用从功能异步代码,您需要提供回调到“回归”的结果。例如:

getCurrentBudget: function (req, callback) { 
    var reqToken = req.headers["authorization"].substr(7); 
    var is = true; 

    jwt.verify(reqToken, config['jwt'], function (error, user) { 
     // Если бюджет текущего пользователя 
     if (user.currentBudget) { 
      db.budget.findOne({ownerId: objectId(user._id)}, function(error, budget) { 
       if (!error && budget) { 
        //Бюджет найден 
        logger.debug('Бюджет найден: %j', budget, {}); 
        callback(budget); 
       } 
      }) 
     } else { 
      // Ищем бюджет в который пригласили этого пользователя 
      db.budget.findOne({membersEmail: user.email}, function(error, budget) { 
       if (!error && budget) { 
        //Бюджет найден 
        logger.debug('Бюджет найден: %j', budget, {}); 
        callback(budget); 
       } 
      }) 
     } 
    }); 
}, 
+0

Спасибобольшое! Эторешениеподошло! –

0

试试这个:

getCurrentBudget: function (req, callback) { // callback is a function to get budget 
    var reqToken = req.headers["authorization"].substr(7); 
    var is = true; 

    jwt.verify(reqToken, config['jwt'], function (error, user) { 
     // Если бюджет текущего пользователя 
     if (user.currentBudget) { 
      db.budget.findOne({ownerId: objectId(user._id)}, function(error, budget) { 
       if (!error && budget) { 
        //Бюджет найден 
        logger.debug('Бюджет найден: %j', budget, {}); 
        callback(budget); 
       } 
      }) 
     } else { 
      // Ищем бюджет в который пригласили этого пользователя 
      db.budget.findOne({membersEmail: user.email}, function(error, budget) { 
       if (!error && budget) { 
        //Бюджет найден 
        logger.debug('Бюджет найден: %j', budget, {}); 
        callback(budget); 
       } 
      }) 
     } 
    }); 
} 

而在你的主,你调用这个方法是这样的:

主要功能(){

getCurrentBudget(req, function(budget) { // this function is your callback actually 
    console.log(budget); 
    }); 
}