如何创建一个返回承诺的自定义函数?

时间:2017-05-31 04:01:25

标签: javascript node.js mongodb promise mongoose-schema

我创建了一个在我的数据库中查找文档的函数。 这是一个自定义函数,我将在我的控制器中将值传递给它的参数。然后我想在之后使用.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);
 });
},

2 个答案:

答案 0 :(得分:1)

Project.find()方法必须返回回调或promise。我们假设它返回一个promise,因此Project.find()的代码将是

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

现在你想创建一个新函数getProjectsList作为一个promise并将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);
                 })
      })
}

答案 1 :(得分:-1)

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

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

});
};