Я недавно пытался обновить приложение, которое использовало PMKPromiseKit, до более новой версии AnyPromise, и я столкнулся с проблемой Promises, не решаемой.
Проблема связана с .then, из-за того, что он не попадает в обещание.
[self updateCityList].then(^{
return [self syncCity: city];
}).catch(^(NSError* error){
//This is a background load; do not present errors to the user
NSLog(@"Error while loading city or routes: %@", error);
}).ensure(^{
[self hideLoadingScreen];
});
Запустится updateCityList, но он не войдет в .then для синхронизации c данных города.
UpdateCityList здесь
- (AnyPromise*) sync {
if (self.syncPromise != nil) {
return self.syncPromise;
}
[self doesDatabaseNeedPurging];
self.syncPromise = [AnyPromise promiseWithResolverBlock:^(PMKResolver resolve){
NSError* error;
CBLDatabase* database = [self loadDatabaseWithError: &error];
if(!database) {
NSErrorDomain errorDomain = @"com.com.com";
NSInteger code = 10042;
@throw [NSError errorWithDomain:errorDomain code:code userInfo:nil];
}
NSURL* url = [self databaseURL];
self.pullReplication = [database createPullReplication: url];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(replicationChanged:)
name: kCBLReplicationChangeNotification
object: self.pullReplication];
[self.pullReplication start];
}].ensure(^(){
[self unregisterCurrentReplication];
});
return self.syncPromise;
}
Self.syncPromise - это просто переменная AnyPromise. Кроме того, .ensure также не срабатывает.
Я что-то упустил после рефакторинга кода?