【问题标题】:node js function.then in not a function using qnode js function.then 不是使用 q 的函数
【发布时间】:2016-06-02 21:23:18
【问题描述】:

你好,它是如此有线,我正在尝试执行异步功能,但是当我使用它时出现错误

使用 q 在 json 包上 "q": "^1.4.1"

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

这是我的助手

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;        
}

当我在控制器中调用此函数时,它会向我发送该错误

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

我也尝试过使用 try and catch 来执行此操作,但仍然出现同样的错误 好吧,这不是第一次,也不是我第一次使用 q 希望有人可以帮忙

【问题讨论】:

  • return newMinutesToSet = (i % 60)
  • $q 给出同样的错误,那返回呢?它从循环中返回
  • 返回不返回承诺,因此没有.then
  • 它是从函数返回,而不是循环。你想休息;
  • @robertklep 可以解释一下吗?

标签: node.js promise q


【解决方案1】:

问题是你从 for 循环中返回了一些东西:

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

所以setNextUserNewsAction 函数没有返回承诺,因此没有.then()

试试这个:

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;
}

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 2022-01-25
    • 2018-02-17
    • 1970-01-01
    • 2021-01-08
    • 2018-07-03
    • 2020-04-05
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多