2016-07-26 7 views
0

을 약속, 그것은 " 사용자 응용 프로그램 PersistedModel 다음 내장 된 모델은 약속의 API를 지원하는"말한다 사용자가 다음 콜백 메소드를 사용하여 제공하는 방법을 다음에 해당 사용자를 기록하는 것은 작동합니다루프백 API와 루프백 문서에서

aUser.create({email: '[email protected]', password: 'foo'}, function() { 
       aUser.login({email: '[email protected]', password: 'foo'}, 'user', function (err, res) { 
        // stuff 
       }); 
      }); 

하지만 약속을 사용하는 것은하지 않습니다

var Promise = require ('bluebird'); 
aUser.create({email: '[email protected]', password: 'bar'}) 
       .then(function(err, res){ 
        aUser.login({email: '[email protected]', password: 'bar'}, 'user'); 
       }) 
       .then(function(err, res) { 
        //stuff 
       }) 
       .catch(function(err){ 
        console.error(err); 
       }); 

Promise.join, Promise.mapSeries도 시도해 보았습니다.

+0

"작동하지 않습니다"어떻게? –

답변

0

두 가지 문제 :이 아닌 약속의 코드와 같은 일을하지 않습니다

  1. 귀하의 약속 코드입니다. 비 약속 코드에서는 aUser.login이 성공적으로 완료 될 때까지는 "물건"을하지 않지만 약속 코드에서는 기다리지 않습니다. 똑같은 일을하려면 먼저 then 콜백을 으로 보내야합니다.을 반환하면 aUser.login이 반환됩니다. 그렇지 않으면 then 로의 첫 번째 호출에 대한 약속은 약속의 해결 또는 거부를 기반으로 정산하는 것이 아니라 undefined 값으로 해결됩니다.

  2. 당신이 당신의 then 콜백을 선언하고 인수는 잘못된 : 해상도 콜백가 해결 된 값입니다 단일 인수를받습니다. 두 개를받는 NodeJS 콜백과는 다릅니다.

그래서 (*** 태그 참조 선) :

var Promise = require ('bluebird'); 
aUser.create({email: '[email protected]', password: 'bar'}) 
    .then(function(res){              // *** 
     return aUser.login({email: '[email protected]', password: 'bar'}, 'user'); // *** 
    }) 
    .then(function(res){              // *** 
     //stuff 
    }) 
    .catch(function(err){ 
     console.error(err); 
    }); 

사이드 참고 : 코드에서 Promise을 사용하지 않는 경우, 필요가 그것을 필요가 없습니다.

+0

답장을 보내 주셔서 감사합니다. 사과와 관련한 약속 예제의 몇 가지 오타가 있지만 의견을 보내 주시면 감사하겠습니다. – stephenwil

+0

@stephenwil : 걱정할 필요가 없습니다. 위의 첫 번째 항목은 아마도 잘못된 것입니다. –