2014-05-07 144 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); 
    }); 
}