약속을 사용하여 코드 흐름을 설정하려고하지만 할 수있는 작업과 수행 할 수없는 작업을 파악하지 못했습니다.Catch-> Then-> Bluebird의 예제 catch
의 내가 원하는 어디, 레지스터 기능을 가지고 있다고 가정 해 봅시다에 :
a)는 사용자 b)는 등록 과정 C 로그) D 활성화 이메일을 보내) 콜백
에 대한 답변을 반환 등록사용자가 이미 존재하는지 확인하고 시작하지 않으면 StorageError
이 던져지고 다음 catch
블록에 걸립니다. 위의 코드를 기반으로
let basicRegister = function (request: any, reply: any) {
let seneca = this;
let act = Promise.promisify(seneca.act, { context: seneca });
User.getByEmail(email).then(function (user: any) {
throw new OperationError("Email already exists");
}).catch(StorageError, function (err: any) {
return User.create().catch(function (err: any) {
throw new OperationError(err.message);
});
}).then((user: any) => {
return UserActivity.create().catch(function (err: any) {
throw new OperationError(err.message);
});
}).then(function (confirmationMessage: any) {
//how can I obtain the user object here?
return { ok: true, user: user };
}).catch(OperationError, (error: any) => {
console.log(error);
return { ok: false, message: error.message };
}).asCallback(reply);
}
, 나는 다음과 같은 질문이 있습니다
1 - 그것은 캐치를 다음 예에서와 같이 인터리브 정상인가를? 그렇지 않은 경우 올바른 접근 방법은 무엇입니까?
2 - then
의 이전 then
에서 user
개체를 얻을 수 있습니까?
사용자 개체가 오류 처리를 exists.Regarding 어디 그냥 범위에 계속할 수, 당신은 userObject로 접근에 대한 자세한 내용은
확실하지 1에 대한)하지만) 2 등, 당신은'var에 finalUser를 선언 할 수있다 '(또는에서 무엇이든은'finalUser = user'을 User.getByEmail''전에 라인)의 논리 소리와 두 번째'.then()'블록을 사용하므로'finalUser' 변수가 최종'then()'블록에서 사용 가능합니다 – Fissio
제안이 잘 작동했습니다. 감사합니다! –