Objc PromiseKit:在承诺中添加新的承诺

时间:2016-07-18 20:46:26

标签: objective-c asynchronous promisekit

我正在使用PromiseKit来简化我的API请求。

在这种情况下,我从服务器获取对象ID列表。然后我需要获取每个ID的详细信息,并返回一系列详细信息。相当普遍的情况。

实际上,我需要在FIRST承诺中包含的FOR循环中向promise链添加promise。

我创建的代码开始向右移动,但是在第二个promises链(填充浅模型请求)之前链完成。

[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
});

有没有更好的方法来做我想要完成的事情?也许是一种用解析器附加承诺(.then)的方法?

1 个答案:

答案 0 :(得分:2)

我想你想要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
});

代码是PromiseKit 3。