(...)。然后不是节点中的函数(expressJS)

时间:2016-06-09 23:13:23

标签: javascript node.js asynchronous promise

我正在使用承诺库hope.js。 问题是有时它会返回以下错误: (...).then is not a function。 我不知道为什么,我不得不做很多修补。

工作方法的代码看起来就像那些没有的方法,唯一不同的是在这种情况下,我正在使用其他库:async.js

我的代码如下:

控制器:

userstoryservice.deleteTaskByIdRemovedUS(userstoryexists)
  .then(function(error, arraysresult) {
      if (error)
        response.status(error.code).json({
          message: error.message
        });

      else
        response.status(200).json({
          message: 'deleted successfully});

        });

我的服务:

exports.deleteTaskByIdRemovedUS = function deleteTaskByIdRemovedUS(userstoryexists) {
  var promise = new Hope.Promise();
  var Task = mongoose.model('Task');
  var obj = {};

  obj.arrTasksIdsRemoved = [];
  obj.arrTasksIdsRemovedErrors = [];

  async.each(userstoryexists.tasks,
    function(item, callback) {
      var query = {
        _id: item.id
      };

      Task.deleteTaskById(item.id).then(function(error) {
        if (error) {
          obj.arrTasksIdsRemovedErrors.push(item.id);
        } else {
          obj.arrTasksIdsRemoved.push(item.id);
        }

        callback(); //required
      });
    },
    function(err) {
      if (err) {
        console.log('Error:' + err);
        return promise.done(err, null);
      } else {
        return promise.done(null, obj);
      }
    });
  } else {
    return promise.done(null, obj);
  }
  return promise;
};

有什么想法吗?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

我发现answer说明了为什么会这样。

问题是mongoose返回自己的承诺,而不是ES6 promise,这会导致冲突。

图书馆的老板也回答了我,并告诉我同样的问题以及如何解决这个问题:link

感谢大家的关注。