为什么返回不能在Mongoose中使用findOne方法?

时间:2016-10-25 21:59:37

标签: javascript node.js mongoose

我尝试按名称查找一个项目,然后更新表格并返回更新的结果,但返回没有工作。我的代码:

class addSongsToArtist {

    constructor(artistName) {

        Artist.findOne({
            name: artistName
        }).exec((err, data) => {
            if (err) console.log(err);

            data.name = 'updated name'
            data.save();

            return data // * not work 
        });
    }
}

进入exec方法我看到数据结果正确,并进入mongo控制台结果保存。但是回归不起作用。我尝试将更改保存到外部变量并在Promise中返回结果,但它也不起作用。 为什么它不起作用?

2 个答案:

答案 0 :(得分:0)

我有解决方案。返回新对象实例的构造方法的问题。 工作代码:

class addSongsToArtist {
    constructor(artistName) {
      this.result = false
        Artist.findOne({
            name: artistName
        }).exec((err, data) => {
            if (err) console.log(err);

            data.name = 'updated name'
            data.save();
            this.result = data
        });
    }

  /**
  * need call in promise after call new addSongsToArtist()
  */
  getData() {
    return this.result
  }
}

获取数据:

let findOne;
Promise.resolve()
  .then(()=>{
     findOne = new addSongsToArtist()
   })
  .then(()=>{
     findOne.getData()
   });

答案 1 :(得分:0)

使用.save async函数作为同步函数,请尝试使用:

constructor(artistName) {

    Artist.findOne({
        name: artistName
    }).exec((err, data) => {
        if (err || !data){
           console.log(err);
           return null;
        }
        else
        {
          data.name = 'updated name'
          data.save(function(err, savedDatas)
          {
             if(err || !savedDatas)
             {
                return null;
             }
             else
             {
                return savedDatas; // * not work 
             }
          });
        }
       });