Javascript 如何生成返回承诺的自定义函数?

Javascript 如何生成返回承诺的自定义函数?,javascript,node.js,mongodb,promise,mongoose-schema,Javascript,Node.js,Mongodb,Promise,Mongoose Schema,我创建了一个在数据库中查找文档的函数。 这是一个自定义函数,我将把值传递给控制器中的参数。然后我想在后面使用.Then()。这是我的密码 自定义函数 getProjectsList(userId) { const query = { users: { $in: [userId] }, isDeleted: false }; Project.find(query); }, 在我的控制器里 projectsList(req, res) { projectModule.g

我创建了一个在数据库中查找文档的函数。 这是一个自定义函数,我将把值传递给控制器中的参数。然后我想在后面使用.Then()。这是我的密码

自定义函数

  getProjectsList(userId) {
    const query = { users: { $in: [userId] }, isDeleted: false };
    Project.find(query);
  },
在我的控制器里

projectsList(req, res) {
  projectModule.getProjectsList(req.user.id)
    .then(() => {   // this is not recognized
         // do something here
    });
},
请帮忙。我试过这样的东西,但没用

getProjectsList(userId) {
 return new Promise(() => {
  const query = { users: { $in: [userId] }, isDeleted: false };
  Project.find(query);
 });
},
Project.find()方法必须返回回调或承诺。让我们假设它正在返回一个承诺,因此Project.find()的代码将是

现在,您需要创建一个新函数getProjectsList作为承诺,并将Project.find()放入其中

所以这可以写成

function getProjectsList(userId){
      return new Promise(function(resolve,reject){

                Project.find(query)
                .then(function(result){
                      // success handling
                      resolve(result);
                  })
                .catch(function(error){ 
                     //error handling
                     reject(error);
                 })
      })
}

您可以使用回调函数。试试这个

projectsList(req, res) {

projectModule.getProjectsList(req.user.id, function(err, result){

if(err){
    res.json({
        "result" : "failure"
    });
}

    res.json({
        "result" : "success"
    });
});
};
在此处获取项目列表函数

getProjectsList(userId, callback) {

const query = { users: { $in: [userId] }, isDeleted: false };

Project.find(query, function(err, result){
    if(err){
        return callback(err);
    }

    callback(null, result);

});
};

Project.find是否返回承诺…?然后
返回Project.find(查询)返回新承诺(()=>{
-返回一个永远无法解决的承诺:p-但是你缺少
返回
是我愚蠢的问题。hahaThis促进了。但是当你想对响应执行一些业务逻辑并保持主代码流干净时,这个模式很有帮助@trincotI不会称之为干净。它被称为re的反模式从来没有一个好的理由像那样滥用诺言。
getProjectsList(userId, callback) {

const query = { users: { $in: [userId] }, isDeleted: false };

Project.find(query, function(err, result){
    if(err){
        return callback(err);
    }

    callback(null, result);

});
};