suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript – Probleme mit der Parallelität von Generatorfunktionen in js, die Sie nicht kennen

Ich habe solchen Code in einem Buch gesehen. Der Zweck des Codes besteht darin, zwei asynchrone Ajax-Anfragen gleichzeitig zu initiieren und die Ergebnisse der Reihe nach in ein Array zu übertragen

//假设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();
} );

Ich habe nie verstanden, wofür die Kontrollübertragung verwendet wird, und das Buch sagt nicht viel darüber

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

Dies ist mein vereinfachter Code, der die Kontrollübertragung entfernt. Welche versteckten Gefahren birgt dies im Vergleich zum Original?
为情所困为情所困2712 Tage vor639

Antworte allen(2)Ich werde antworten

  • 巴扎黑

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

    个人觉得书上的代码之所以这么啰嗦,只是为了保证得到data数组的顺序。
    相反,你简化的代码很优雅啊,简单干净利索。。。

    Antwort
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:33:03

    就是获取数据之后再次暂停generator,等待统一记录到数组,控制了写入数组的顺序。

    你改写的版本 Promise.all 里的代码没用。

    Antwort
    0
  • StornierenAntwort