NodeJS:未处理的承诺在方法结束时拒绝

目前,我正在使用快速和mongoose的RESTful-API,现在我有一个问题。

首先,我的方法:

public create() : Promise<UserDocument> { return new Promise((user) => { User.exists(this.username).then((exists) => { if (exists) { throw Errors.mongoose.user_already_exists; } else { UserModel.create(this.toIUser()).then((result) => { user(result); }).catch(() => { throw Errors.mongoose.user_create }); } }).catch((error) => { throw error; }) }); } 

当我执行这个方法时,我得到了一个未处理的诺言拒绝。 即使我在执行这样的方法时处理错误,也会发生这种情况:

 User.fromIUser(user).create().then(() => { return response.status(200).send({ message: "Created", user }); }).catch((error) => { return response.status(500).send({ message: error }); }); 

完整的堆栈跟踪:

 (node:23992) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): User already exists (node:23992) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 

我怎样才能避免这种情况?

感谢您的帮助,felixoi

我find了解决scheme! 只需使用“解决,请求”来创build一个承诺。

现在我的方法是:

 public create() : Promise<any> { return new Promise((resolve, reject) => { User.exists(this.username).then((exists) => { if (exists) { reject( Errors.mongoose.user_already_exists); } else { UserModel.create(this.toIUser()).then((result) => { resolve(result); }).catch(() => { reject(Errors.mongoose.user_create); }); } }).catch((error) => { reject(error); }) }) } 

如果你现在调用方法,你可以使用catch()方法,一切正常! 像这样调用它:

 User.fromIUser(user).create().then((user) => { return response.status(200).send({ message: "Created", user }); }).catch((error) => { return response.status(500).send({ message: error }) })