recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Problèmes de concurrence des fonctions génératrices dans js que vous ne connaissez pas

J'ai vu un tel code dans un livre. Le but du code est de lancer deux requêtes ajax asynchrones en même temps et de placer les résultats dans un tableau dans l'ordre

//假设request是基于primose的ajax工具
var arr = [];
function *reqData ( url ) {
    var data = yield request(url);
    yield;    //关于这一行书上是这样解释的,控制转移
    arr.push(data);
}
var it1 = reqData("http:....1"), it2 = reqData("http:....2");    //总之是2个不同的url地址
var p1 = it1.next(), p2 = it2.next();
p1.then( function(data) {
    it1.next(data);
} );
p2.then( function(data) {
    it2.next(data);
} );
Promise.all([p1, p2]).then( function () {
    it1.next();
    it2.next();
} );

Je n’ai jamais compris à quoi sert le transfert de contrôle, et le livre n’en dit pas grand chose

var arr = [];
function *reqData ( url ) {
    arr.push( yield  request(url) );
};
var it1 = reqData("http:....1"), it2 = reqData("http:....2");    //总之是2个不同的url地址
var p1 = it1.next(), p2 = it2.next();
Promise.all([p1, p2]).then( data => {
    var [data1, data2] = data;
    it1.next(data1);
    it2.next(data2);
});

Ceci est mon code simplifié, supprimant le transfert de contrôle. Quels sont les dangers cachés de cela par rapport à celui d'origine

为情所困为情所困2727 Il y a quelques jours651

répondre à tous(2)je répondrai

  • 巴扎黑

    巴扎黑2017-06-12 09:33:03

    Personnellement, je pense que la raison pour laquelle le code du livre est si verbeux est simplement pour garantir l'ordre d'obtention du tableau de données.
    Au contraire, votre code simplifié est très élégant, simple et épuré. . .

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:33:03

    C'est-à-dire qu'après avoir obtenu les données, le générateur est à nouveau mis en pause, en attendant un enregistrement uniforme sur le tableau et en contrôlant l'ordre d'écriture sur le tableau.

    Le code dans votre version réécrite de Promise.all est inutile.

    répondre
    0
  • Annulerrépondre