2016-06-02 12 views
0

Hallo seines so verdrahtet Ich versuche Asynchron-Funktion zu tun, aber wenn ich es benutze ich Fehler erhaltenKnoten js function.then in nicht eine Funktion q mit

q mit auf Paket json "q": "^1.4.1"

TypeError: helper.setNextUserNewsAction(...).then is not a function 

dies ist mein Helfer

module.exports = function() { 
    return { 
    setNextUserNewsAction: setNextUserNewsAction 
    } 
}(); 

function setNextUserNewsAction(minutesToSet){ 
    var defer = q.defer(); 
    var x = minutesToSet; 
    var d = new Date(); 
    var nextNews = new Date(d.getTime() + x*60000); 
    var minutes = nextNews.getMinutes(); 
    var newMinutesToSet = 0; 
    for (var i = 0 , j = minutesToSet; j <= 60; i+=minutesToSet,j+=minutesToSet) { 
     if (minutes > i && minutes < j) 
      return newMinutesToSet = (i % 60);   
    } 
    nextNews.setMinutes(newMinutesToSet); 
    nextNews.setSeconds(00); 
    var NextNewsAction = { 
     AccessDate: nextNews, 
     Type: 'News', 
     Current: 1 
    } 
    defer.resolve(NextNewsAction); 
    return defer.promise;   
} 

und wenn ich diese Funktion in meinem Controller nenne es mir, dass Fehler senden

var helper = require('../helpers/playlist'); 
helper.setNextUserNewsAction(15).then(function(action){ 
    console.log(action); 
},function(err){ 
    console.log(err); 
}); 

ich habe auch versuchen Sie das einmal mit try und catch und noch denselben Fehler gut es ist nicht das erste Mal, oder die 20 Ich bin mit q jemand Hoffnung

+0

Try $ q.defer. :) –

+2

'return newMinutesToSet = (i% 60)' – robertklep

+0

$ q geben Sie den gleichen Fehler was ist mit dieser Rückkehr? seine Rückkehr aus der Schleife – Erez

Antwort

1

Das Problem helfen kann, ist, dass Sie zurückkehren etwas von der for-Schleife:

for (var i = 0, j = minutesToSet; j <= 60; i += minutesToSet, j += minutesToSet) { 
    if (minutes > i && minutes < j) 
     return newMinutesToSet = (i % 60); 
} 

So ist die setNextUserNewsAction Funktion ist nicht ein Versprechen der Rückkehr, daher gibt es keine .then().

Versuchen Sie folgendes:

var q = require('q'); 

module.exports = function() { 
    return { 
     setNextUserNewsAction: setNextUserNewsAction 
    } 
}(); 

function setNextUserNewsAction(minutesToSet){ 
    var defer = q.defer(); 
    var x = minutesToSet; 
    var d = new Date(); 
    var nextNews = new Date(d.getTime() + x*60000); 
    var minutes = nextNews.getMinutes(); 
    var newMinutesToSet = 0; 
    for (var i = 0, j = minutesToSet; j <= 60; i += minutesToSet, j += minutesToSet) { 
     if (minutes > i && minutes < j) { 
      newMinutesToSet = (i % 60); 
     } 
    } 
    nextNews.setMinutes(newMinutesToSet); 
    nextNews.setSeconds(00); 
    var NextNewsAction = { 
     AccessDate: nextNews, 
     Type: 'News', 
     Current: 1 
    } 
    defer.resolve(); 
    return defer.promise; 
} 
+0

Sie hatten Recht, danke – Erez

+0

Sie sind herzlich willkommen ;-) –