2015-02-02 5 views
2

나는 다음과 같은 코드 (몽구스는 블루 버드 promisified 된) 한 채 웁니다는 몽구스는 약속을 저장하고

function createNewCourse(courseInfo, teacherName) { 
    var newCourse = new courseModel({ 
     cn: courseInfo.courseName, 
     cid: courseInfo.courseId 
    }); 

    return newCourse.saveAsync() 
     .then(function (savedCourse) { 
      var newTeacher = new newTeacherModel({ 
       na: teacherName, 
       _co: savedCourse._id // This would be an array 
      }); 

      return newTeacher.saveAsync().then(function() { 
       return newCourse; 
      }); 
     }); 
} 

이 내 문제의 단순화이지만 잘 보여줍니다. 내 createNewCourse 함수가 일단 해결되면 새로 저장 한 과정을 반환하겠다는 약속을 반환하길 원합니다. 은 교사가 아니요입니다. 위의 코드는 작동하지만 우아한 것은 아니며 콜백 지옥을 피하기 위해 약속을 잘 사용하지 않습니다.

내가 고려한 또 다른 옵션은 코스를 반환 한 다음 데이터를 채우는 것이지만 데이터베이스를 다시 쿼리하는 것입니다.

아이디어를 줄이는 방법은 무엇입니까?

편집는 : 작품 체인 방법

function createNewCourse(courseInfo, teacherName) { 
    var newCourse = new courseModel({ 
     cn: courseInfo.courseName, 
     cid: courseInfo.courseId 
    }); 

    return newCourse.saveAsync().then(function (savedCourse) { 
     var newTeacher = new newTeacherModel({ 
      na: teacherName, 
      _co: savedCourse._id // This would be an array 
     }); 

     return newTeacher.saveAsync(); 
    }).return(newCourse); 
} 

기억 나는

function createNewCourse(courseInfo, teacherName, callback) { 
    var newCourse = new courseModel({ 
     cn: courseInfo.courseName, 
     cid: courseInfo.courseId 
    }); 

    newCourse.save(function(err, savedCourse) { 
     var newTeacher = new newTeacherModel({ 
      na: teacherName, 
      _co: savedCourse._id // This would be an array 
     }); 

     newTeacher.save(function(err, savedTeacher) { 
      callback(null, newCourse); 
     }); 
    }); 
} 

답변

4

사용 .return() 코드 그러나 네이티브 콜백을 사용하여 (생략 오류 처리를) 저장이 게시 유용 할 수 있습니다 생각 ?

.then(function() { 
    return somethingAsync().then(function(val) { 
     ... 
    }) 
}) 

(모든 폐쇄 변수를 무시)하는 것과 같습니다

.then(function() { 
    return somethingAsync() 
}) 
.then(function(val) { 
    ... 
}) 

return(x).then(function(){return x;})

단순히 동일합니다
관련 문제