簡體   English   中英

使用q.js承諾時出現問題

[英]Issue while using q.js promises

以下代碼使用q.js來獲取學生的詳細信息。 一切工作正常,除了未將獲取的類別和城市映射到可變的studentdetails 它僅包含由郵件查詢獲取的詳細信息(名稱,電子郵件,id,dob)。 我要去哪里錯了? 任何線索將不勝感激。

//fetches category of student
var getJobCategories = function(student) {
            var deferred = Q.defer();
            var categoryquery = 'select c.name,c.id from category c,student_category sc where xxxx';
            db.query(categoryquery, function(err, categories, fields) {
                if(categories.length == 0) {
                    student.categories = "NA";
                } else {
                    student.categories = categories;
                }
                console.log(student)//prints details with categories
                deferred.resolve();
            });
            return deferred.promise;

        }
//fetches city of student
        var getCurrentCity = function(student) {
            var deferred = Q.defer();
            var cityquery = 'select l.name,l.id from location l ,student_location sl where xxxx';
            db.query(cityquery, function(err, city) {
                if(city.length == 0) {
                    student.currentcity = "NA";
                } else {
                    student.currentcity = city;    
                }
                console.log(student)//prints details with city
                deferred.resolve();
            });
            return deferred.promise;

        }

        var query='select name,email,id,dob from student limit 1,10'; 
        db.query(query, function(err1, studentdetails) {
             var promise1=studentdetails.map(function(student){ 
           var result=getJobCategories(student)

                 });
                 var promise2=studentdetails.map(function(student){ 
                      getCurrentCity(student)
                 });

             var allpromises= Q.all([
                 promise1,promise2

             ]);

             Q.allSettled(allpromises)
                 .then(function (results) {
                           next(null,{
                         result: studentdetails,
                         msg: "Fetched successfully"
                     });     
                 });//then
        });//query

您可以嘗試以下方法:

db.query(query, function(err1, studentdetails) {
             var allStudentJobCategories = 
                studentdetails.map(function(student){ 
                    return getJobCategories(student)
                });

             var allStudentCities = 
                 studentdetails.map(function(student){ 
                   return getCurrentCity(student)
                 });

             var allpromises= Q.all([
                 Q.all(allStudentJobCategories), Q.all(allStudentCities)
             ]);

             Q.allSettled(allpromises)
              .then(function (results) {
                       next(null,{
                     result: studentdetails,
                     msg: "Fetched successfully"
                 });     
             });//then
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM