cds*_*per 5 asynchronous objective-c promisekit
我正在使用PromiseKit来简化我的API请求.
在这种情况下,我从服务器获取对象ID列表.然后我需要获取每个ID的详细信息,并返回一系列详细信息.相当普遍的情况.
实际上,我需要在FIRST承诺中包含的FOR循环中向promise链添加promise.
我已经创建了开始向右移动的代码,但是链可以在第二个promise链(填充浅模型请求)之前完成.
[PMKPromise promiseWithResolver:^(PMKResolver resolve) {
// Fetch an array of object IDs (shallow objects)
[APIManager fetchObjectListWithCompletion:^(NSArray *resultObjects, NSError *error) {
resolve(error ?: resultObjects[0]);
}];
}].then(^(NSArray *objects){
// Fill each shallow object (query details)
PMKPromise *fetches = [PMKPromise promiseWithValue:nil];
for(id model in objects) {
fetches.then(^{
[APIManager fillShallowObject:model withCompletion:^(NSArray *resultObjects, NSError *error) {
// resolve?
}];
});
}
// Return promise that contains all fill requests
return fetches;
})].then(^{
// This should be executed after all fill requests complete
// Instead it's executed after the initial ID array request
});
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做我想要完成的事情?也许是一种用解析器附加承诺(.then)的方法?
我想你想要when:
[AnyPromise promiseWithAdapterBlock:^(id adapter) {
[APIManager fetchObjectListWithCompletion:adapter];
}].then(^(id objects){
NSMutableArray *promises = [NSMutableArray new];
for (id model in objects) {
id promise = [AnyPromise promiseWithAdapterBlock:^(id adapter){
[APIManager fillShallowObject:model withCompletion:adapter];
}];
[promises addObject:promise];
}
return PMKWhen(promises);
}).then(^(NSArray *results){
// when waits on all promises
});
Run Code Online (Sandbox Code Playgroud)
代码是PromiseKit 3。
| 归档时间: |
|
| 查看次数: |
1095 次 |
| 最近记录: |