2014-11-11 3 views
-1

Nodejs와 Q를 사용하여 일련의 비동기 함수를 실행하고 있습니다. 하나가 실패하면 다른 기능을 실행하고 다시 시퀀스를 시작하고 싶습니다. 그것이 그대로입니다 :실패 후 약속 다시 시작

var promise = database.getUserCookies(user) 
    .then(function (data){ 
     return proxy.search(data); 
    }) 
     .fail(function (data) { 
      if (data.rejected === 302) { 
       var relogin = database.fetchAuth(data) 
        .then(function (data) { 
         return proxy.login(data) 
        }) 
        .then(function (data){ 
         return database.saveCookies(data); 
        }) 
        .then(function (data){ 
         //Restart the promise from the top. 
        }) 
      } 
     }) 
    .then(function (data){ 
     return responser.search(data); 
    }) 

답변

6

다시 호출 할 수있는 함수로 포장해야합니다. 약속은 그 자체로 "다시 시작"할 수 없습니다.

var promise = (function trySearch() { 
    return database.getUserCookies(user) 
    .then(proxy.search) 
    .fail(function(err) { 
     if (err.rejected === 302) { // only when missing authentication 
      return database.fetchAuth(data) 
//   ^^^^^^ 
      .then(proxy.login) 
      .then(database.saveCookies) 
      .then(trySearch) // try again 
     } else 
      throw err; 
    }) 
}()) 
.then(responser.search) 
관련 문제