PromiseKit을 사용하여 일부 콜백 지옥 피라미드의 파멸 코드를 길들이려하고 있습니다.PromiseKit 종속 약속은 초기 할당 해제 결과를
이렇게하려면 약속에서 비동기 코드를 래핑하지만 의존성 약속을 반환하는 방법에 따라 문제가 발생합니다. 약속을 풀고 성취/거절하면 모든 것이 잘되지만 내가 원하는 것보다 더 장황하다. 새로운 부양 약속을 되 찾으면 조기 할당을 받고 약속이 조용히 깨집니다.
나는이
{ a }.then { b }.then { c } // in temporal order, take that, callbacks!
하지만 나를 기능 Promise<A> -> Promise<B>
와 리팩토링하고, 내가 랩을 해제해야하는 이유 이해가 안이 작품의 일부로이 편리 것으로 보인다 관용적 PromiseKit,하지 않을 수도 있습니다 실현 모든 단계에서. 아는 사람 있나요?
다음은 문제를 재현하는 몇 가지 간단한 코드입니다. badStringFromInt
이 즉시 수행 할 수없는 좋은 이유가 있다고 상상해보십시오.
func badStringFromInt(_ intPromise: Promise<Int>) -> Promise<String> {
return Promise { _, reject in
intPromise.then { i -> Promise<String> in
return Promise { fulfill, _ in
fulfill("\(i)")
}
}.catch { error in
reject(error)
}
}
}
func goodStringFromInt(_ intPromise: Promise<Int>) -> Promise<String> {
return Promise { fulfill, reject in
intPromise.then { i in
fulfill("\(i)")
}.catch { error in
reject(error)
}
}
}
func getInt() -> Promise<Int> {
return Promise{ fulfill, reject in
fulfill(5)
}
}
func doIt() {
// "then" never called, and this is logged:
// PromiseKit: Pending Promise deallocated! This is usually a bug
badStringFromInt(getInt()).then { s in
print("bad string is :" + s)
}.catch { error in
print("error: \(error)")
}
// all good!
goodStringFromInt(getInt()).then { s in
print("good string is :" + s)
}.catch { error in
print("error: \(error)")
}
}
아니요, 저는 누락되었습니다. 나는'next'가'Promise'를 반환했다는 것을 알지 못했고, 이제는 그것을 반환하고 오류 처리를 더 이상 체인에서 처리하도록합니다. 나는 아직도 할당 해제 문제를 이해하지 못한다. 그러나 불필요한'약속 (Promise) '래퍼는 이제 사라 졌으므로 정말로 필요하지는 않다. 고맙습니다! –