2017-10-19 13 views
0

J'utilise la fonction de promesse pour promettre XHR et j'aimerais savoir comment obtenir la réponse, et la renvoyer au serveur si la réponse est réussie.Utilisation du constructeur de promesses pour renvoyer une valeur au serveur

que je fais quelque chose si ce createChannel réussir comme ça

function createChannel(method, url) { 
    return new Promise(function (resolve, reject) { 
     xhr.open(method, url, true); 
     xhr.setRequestHeader("Content-Type", "application/json"); 
    xhr.onload = function() { 
     if (xhr.readyState == 4) { 
      var hashValue = resolve(JSON.parse(xhr.responseText)); 
      console.log(hashValue); 
     } 
     else { 
      reject({ 
       status: this.status, 
       statusText: xhr.statusText 
      }); 
     } 
    }; 
    xhr.onerror = function() { 
      reject({ 
       status: this.status, 
       statusText: xhr.statusText 
      }); 
     }; 
    xhr.send(json); 
}); 
} 
createChannel(method, url) 
    .then(function (datums) { 
    console.log(datums) 
}).catch(function (err) { 
    console.error('Sorry There Was An Error!', err.statusText); 
}); 

, j'aimerai prendre la variable valeur de hachage, et faire une demande au serveur pour obtenir une nouvelle valeur.

.then(function (createChannel) { 
    console.log(createChannel);  
}); 

est-ce possible en utilisant la promesse? Merci pour le conseil.

+0

On ne sait pas ce que « l'envoyer à nouveau » signifie? Lorsque vous obtenez la promesse résolue et obtenez votre valeur 'datums' dans le gestionnaire' .then() ', que voulez-vous faire à ce moment-là? – jfriend00

+0

hey @ jfriend00 désolé pour mon choix de libellés, je voudrais faire une nouvelle demande au serveur/url quand je reçois la promesse résolue. Je veux prendre la variable de hachage et faire une nouvelle demande de poste – PythonRookie

+0

OK, je l'ai montré dans ma réponse. – jfriend00

Répondre

1

l'intérieur de votre gestionnaire .then(), vous émettez juste une nouvelle demande et retourner cette promesse, enchaînant à la première:

createChannel(method, url).then(function (datums) { 
    console.log(datums); 
    // call some other async function here that returns a promise 
    return someOtherFunctionThatReturnsAPromise(datums); 
}).then(function(finalResult) { 
    console.log(finalResult);   
}).catch(function (err) { 
    console.error('Sorry There Was An Error!', err.statusText); 
}) 
+0

Merci, il semble que c'était si j'étais confus, je vais essayer et voir si cela fonctionne. – PythonRookie

+0

Bonjour @ jfriend00, je veux savoir, createchannel détient-il déjà la valeur de la variable hashvalue? Je ne sais pas si je pose une question stupide que je devrais déjà savoir. Merci pour l'aide – PythonRookie

+0

je l'ai compris, merci. – PythonRookie