2016-10-25 3 views
0

이름으로 한 항목을 찾은 다음 테이블을 업데이트하고 업데이트 된 결과를 반환하려고 시도했지만 반환되지 않았습니다. 내 코드 :몽구스 findOne 메소드에서 return이 작동하지 않는 이유는 무엇입니까?

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

간부 인 방법 속으로 나는 올바른 결과 데이터를보고, 몽고 콘솔 결과에 저장. 하지만 돌아 오지는 마라. 외부 변수에 변경 사항을 저장하고 Promise에서 결과를 반환하려고 시도했지만 작동하지 않습니다. 왜 작동하지 않습니까?

+1

'일하지 않는다 '는게 무슨 뜻이야? 그것은 비동기식 메서드입니다. 그래서 그것을 사용하기 위해'data'의 값을 어떻게 받아들입니까? 그 코드를 공유 할 수 있습니까? –

+0

'data.save'는 입출력이므로 시간이 걸립니다. 몽구스가 그걸 가지고 놀기 전에 당신은 아무것도 돌려 보내지 않습니다. '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() 
    }); 
관련 문제