2016-07-18 8 views
5

मैं केवल अपने एपीआई अनुरोधों के लिए PromiseKit का उपयोग कर रहा हूं।Objc PromiseKit: एक वचन के भीतर से नए वादे जोड़ें

इस परिदृश्य में, मैं सर्वर से ऑब्जेक्ट आईडी की एक सूची ला रहा हूं। मुझे फिर प्रत्येक आईडी के लिए विवरण प्राप्त करने की आवश्यकता है, और विवरण की एक सरणी वापस करनी है। काफी आम परिदृश्य।

प्रभावी रूप से, मुझे वादे श्रृंखला में वादे श्रृंखला में वादे जोड़ने की आवश्यकता है जो पहले वादे में निहित है।

मैंने कोड बनाया है जो सही बहाव शुरू होता है, लेकिन श्रृंखला वादे की दूसरी श्रृंखला (भरने वाले उथले मॉडल अनुरोधों) से पहले पूर्ण हो जाती है।

[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) जोड़ने का एक तरीका है?

+0

है 'जब' पर एक नज़र डालें: http://promisekit.org/when/। मैं PromiseKit के लिए नया हूं, लेकिन ऐसा लगता है कि आपको यही चाहिए। – fishinear

उत्तर

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.

+0

आप त्रुटियों को कैसे पकड़ते हैं। मेरा मतलब स्विफ्ट की तरह है [पूरा करें (dict), अस्वीकार करें (त्रुटि)] – nova

+0

मुझे आपका प्रश्न नहीं समझ रहा है, इसे यहां क्यों न पूछें: https://gitter.im/mxcl/PromiseKit – mxcl

संबंधित मुद्दे