当前位置: 首页 > 面试题库 >

对象# 没有方法'catch'

白宏放
2023-03-14
问题内容

我的用户库具有以下用于注册的代码

function register {
// do some validation on lib level

//user is instance of user collection
user.save()
    .then(function(error,records, numberOfRecords) {
        // got any kind of error
        if (error) {
            next('fail',msg,{error_code : 510, exception : ex} )
            return ;        
       }
        next('success','good', records );
    })
    .catch(function(ex) {
        var msg =  ex.message;
        error = ex
        system.log.error(msg);
        next('fail',msg,{error_code : 510, exception : ex} );
    }).done();
}

在我的mongooes模式中,我实现了中间件

    User.pre('save', function (next) {

          // just checking error is available in catch schope or not
          var err = new Error('I am doing some experiment on it');
          next(err);
    });

var Promise = require('bluebird');

var User = mongoose.model('User');
Promise.promisifyAll(User);
Promise.promisifyAll(User.prototype);

得到以下问题

TypeError: Object #<Promise> has no method 'catch'
    at User.register (/server/core/modules/user.js:69:10)
    at router.post.http.request (/server/routes/user.js:55:8)
    at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:82:5)
    at next (/node_modules/express/lib/router/route.js:110:13)
    at Route.dispatch (/node_modules/express/lib/router/route.js:91:3)
    at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:82:5)
    at /node_modules/express/lib/router/index.js:267:22
    at Function.proto.process_params (/node_modules/express/lib/router/index.js:321:12)
    at next (/node_modules/express/lib/router/index.js:261:10)
    at Function.proto.handle (/node_modules/express/lib/router/index.js:166:3)
    at router (/node_modules/express/lib/router/index.js:35:12)
    at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:82:5)
    at trim_prefix (/node_modules/express/lib/router/index.js:302:13)
    at /node_modules/express/lib/router/index.js:270:7
    at Function.proto.process_params (/node_modules/express/lib/router/index.js:321:12)
    at next (/node_modules/express/lib/router/index.js:261:10)
    at /server/router.js:45:3

我的问题是::
如何解决这个问题?
如何从mongooes中间件捕获错误到我的lib函数(捕获)?


问题答案:

似乎您没有使用Bluebird,但使用了mongoose
promises(mpromise),它没有.catch方法。

您可以通过解决此问题

  • user.saveAsync().then(…)在确定User模型后使用,
  • 使用Promise.resolve(user.save()).then(…)投猫鼬承诺变成一个蓝鸟


 类似资料:
  • 在这部分内容的第一章中,我们提到了设置原型的现代方法。 __proto__ 被认为是过时且不推荐使用的(deprecated),这里的不推荐使用是指 JavaScript 规范中规定,proto 必须仅在浏览器环境下才能得到支持。 现代的方法有: Object.create(proto, [descriptors]) —— 利用给定的 proto 作为 [[Prototype]] 和可选的属性描述

  • 问题内容: 我的控制器文件中包含以下内容: 我的服务器代码运行并返回: 但是我得到以下错误: 有人知道我在做什么错吗? 问题答案: 我只是更改为,因为期望一个对象并且期望一个数组。

  • ​正如我在这篇文章中看到的,我正试图从YAML文件创建一个服务器对象列表,但是使用Micronaut。 我的YAML文件具有以下配置: 我的POJO是: 我的服务是: 我在系统上设置了一个断点。出来println行并以调试方式启动应用程序,但什么也没发生。 我需要做任何额外的配置吗?

  • 假设我有一个用户模式/模型,用户有一个朋友列表。Mongoose希望您将好友列表(外键/ObjectID类型)存储为数组,对吗?这意味着如果我想通过ID找到我的朋友,Mongoose将搜索数组,直到找到具有我想要的ID的朋友的第一个实例。那似乎真的是时间低效,不是吗?有更好的办法吗?

  • 我正在使用一个页面对象模型来实现我的自动化,我正在测试类中创建一个页面对象,如下所示。(只是一个示例代码) 但是随着我的页面数量的增加,在测试类中创建页面对象的数量也会增加。我想知道是否有任何其他优化方法来创建页面对象或任何我正在做的是好的?

  • 这是我的密码: 这条线给了我错误 "属性错误:'浮点'对象没有属性'exp'"。X,t是Numpy ndarray。