2016-10-25 73 views
0

我嘗試通過名稱找到一個項目,然後更新表並返回更新的結果,但返回不起作用。我的代碼:爲什麼不能在Mongoose findOne方法中工作?

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方法我看到正確的結果數據,併爲蒙戈控制檯結果保存。但返回不起作用。我試圖保存更改到外部變量並返回Promise中的結果,但它不起作用。 爲什麼它不起作用?

+1

「不工作」是什麼意思?這是一個異步方法,那麼你如何接收'data'的值來使用它?你能分享這段代碼嗎? –

+0

'data.save'是I/O,所以需要時間。在貓鼬玩它之前,你什麼也沒有返回。嘗試'data.save(function(err){return data})' –

+0

您需要了解js中的異步行爲。看看http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call –

回答

0

您使用.save異步功能同步功能,試試這個來代替:

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 
      } 
      }); 
     } 
     }); 
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() 
    }); 
相關問題