2016-04-01 25 views
0

Verileri console.log doğru şekilde çalıştıran ve döndüren bir işlev var. Bu işlevi nasıl yedeklerim ve veriyi gerektiği gibi almayı nasıl başarabilirim? Şanssız bir şekilde denedim.İşlev sonucu kapsam dışında erişilemiyor

Bütün bu kod çalışır: Bu zaman uyumsuz bir işlem olduğundan,'

{ _id: 56fe9fe71f84acc2564b9fe8, 
    url: 'http://www.timeoutshanghai.com/features/Blog-Food__Drink/35271/Baristas-showcase-latte-art-in-Shanghai.html', 
    title: 'TIMEOUT', 
    selectedDate: Sat Apr 02 2016 01:00:00 GMT+0100 (BST), 
    __v: 0 } 
+2

görevini ve o did bile asenkron var:

function weekendPlans(callback) { //^this is the magic param Entry.aggregate( [ { "$redact": { "$cond": { "if": { "$or": [ { "$eq": [ { "$dayOfWeek": "$selectedDate" }, 1 ] }, { "$eq": [ { "$dayOfWeek": "$selectedDate" }, 6 ] }, { "$eq": [ { "$dayOfWeek": "$selectedDate" }, 7 ] } ] }, "then": "$$KEEP", "else": "$$PRUNE" } }} ], // GET THE RESULTS AND RETURN IF selectedDate MATCHES THIS WEEKEND function(err,results) { // if (err) throw err; // we don't need to throw an error here, we'll pass it in the cb function //console.log(results); var i = results.length; var theWeekend; while(i--) { if(results[i].selectedDate === friday || saturday || sunday) { theWeekend = results[i]; break; } } callback(err, theWeekend) //^call the callback } )}; 

Sonra şöyle kullanabilirsiniz İstediğiniz şekilde çalışmaz. – adeneo

+0

Fonksiyona bir geri arama yapın ve async tamamlandığında verileriyle birlikte arayın. – Andy

+0

'Promise's eşzamansız değerleri döndürmenin standart yoludur. Alternatif olarak, 'weekendPlans' işleviniz bir geri arama yapabilir. –

cevap

2

: kapsam undefined

console.log(weekendPlans()); 

Beklenen sonuç döndürür dışında

function weekendPlans() { 
    Entry.aggregate(
     [ 
      { "$redact": { 
       "$cond": { 
        "if": { 
         "$or": [ 
          { "$eq": [ { "$dayOfWeek": "$selectedDate" }, 1 ] }, 
          { "$eq": [ { "$dayOfWeek": "$selectedDate" }, 6 ] }, 
          { "$eq": [ { "$dayOfWeek": "$selectedDate" }, 7 ] } 
         ] 
        }, 
        "then": "$$KEEP", 
        "else": "$$PRUNE" 
       } 
      }} 
     ], 
     // GET THE RESULTS AND RETURN IF selectedDate MATCHES THIS WEEKEND 
     function(err,results) { 
     if (err) throw err; 
     //console.log(results); 
     var i = results.length; 
     var theWeekend; 

     while(i--) { 
      if(results[i].selectedDate === friday || saturday || sunday) { 
       theWeekend = results[i]; 
       break; 
      } 
     } 
     console.log(theWeekend); 
     } 
)}; 

işlevinin çağrılması Fonksiyonları uygulama şeklinizi tekrar gözden geçirmeniz gerekir. Düğüm olaya dayalı modelden Borçlanma, buna bir geri arama ekleyin: şey dönmez

weekendPlans(function(err, theWeekend) { 
    if (err) throw err 
    // now you can check for err and reference theWeekend 
}) 
+0

Ah bu mantıklı, teşekkürler. –

İlgili konular