2016-11-01 2 views
0

J'ai écrit un plugin pour effectuer des appels GET/POST. La plupart des appels fonctionnent sauf lorsque j'ai plusieurs appels: P.NSURLSession Client HTTP ne retournant pas la demande dans l'ordre correct

Débogage en XCode Je peux voir que les données (réponse) des appels sont là mais pas dans l'ordre attendu. Comment puis-je m'assurer que la réponse est dans le bon ordre? Exemple d'erreur: Je place 3 appels, dans mon code JS je reçois la réponse de call02 au lieu de call01.

Mon code de référence: http://pastebin.com/npgNn2Jk

+0

Ne faites pas de la seconde jusqu'à ce que la première arrivée. Mais si vous recevez la réponse de 2 sur appel 1 alors votre plugin est faux, cela ne devrait pas arriver, vous devez stocker les demandes sur un tableau et vérifier quelle requête a retourné quelle réponse – jcesarmobile

+0

En fait, je passais un callbackID global et cela fonctionne pour appels uniques, mais une fois que j'ai eu plusieurs appels le même callbackID global a été passé au gestionnaire entraînant une mauvaise réponse lol dammit! – Wils

Répondre

0

homme Ohhhh, a finalement trouvé la question lol. La question était une approche globale du callbackID:

self.callbackId = command.callbackId; 

Une fois que je mis à jour le code pour passer le callbackId à tout POST/GET a commencé à fonctionner correctement.

commentaire ici au cas où quelqu'un d'autre terme dans la question:

Avant:

- (void)http:(CDVInvokedUrlCommand*)command { 
    self.callbackId = command.callbackId; 

    // NSURLSessionConfiguration 
    [self initializeSession:headers]; 
    if ([method isEqualToString:@"POST"]) { 
     [self doPost:url withData:data withHeaders:headers]; 
    } else { 
     [self doGet:url withQueryString:queryString]; 
    } 
} 

Après:

- (void)http:(CDVInvokedUrlCommand*)command { 
    self.callbackId = command.callbackId; 

    // NSURLSessionConfiguration 
    [self initializeSession:headers]; 
    if ([method isEqualToString:@"POST"]) { 
     [self doPost:url withData:data withHeaders:headers withCommandID:command.callbackId]; 
    } else { 
     [self doGet:url withQueryString:queryString withCommandID:command.callbackId]; 
    } 
}