q筆記一:非同期プログラミング入門

2741 ワード

q筆記一:非同期プログラミング入門
ソースのgithubアドレスはここで、星を覚えています.https://github.com/brandonxiang/example-q
前言
javascriptの長所は、非閉塞にあることをみんなが知っています.Javascript非同期プログラミングの4つの方法は、Javascriptの単一スレッドの特性と同期(Synchronous)非同期(Asynchronous)の実行モードを指摘し、4つの非同期の方法を説明しました.今最も重要なのはもちろんPromisesオブジェクトです.
PromisesオブジェクトはCommonJS作業グループが提案した仕様で、非同期プログラミングのために統一インターフェースを提供することを目的としています.
非同期プログラミングは大きな効率優位を持っていますが、非同期が多いとピラミッド型のコード構造になり、読みにくくなり、非同期の制御が非常に難しくなります.
$.getJSON('./api', function(data){
    console.log(data);
    $.getJSON('./api', function(data){
        console.log(data);
    }
})
この時はPromiseモードが必要です.このようなモデルはES 6ですでに官配されています.Javascriptの神器Promiseを参考にしています.しかし、一部の人はまだES 5の開発に滞在しています.node.jsに接触していない場合、第三者倉庫を使って非同期のプロセスをコントロールする必要があります.
PromiseはES 5で実現しました
  • q
  • ブルーバード
  • co
  • when
  • qの詳細
    他のいくつかの資源庫は大同小異で、ひそかに研究しておくべきです.
    シリアルthenは、1つのキーワードとして、関数async('first')async('second')async('third')async('fourth')とを分離し、全体的に第1の関数を完成させてから第2の関数のシーケンス動作を完了することを示している.
    async('first').then(function (resp) {
          console.log(resp);
          return async('second');
    }).then(function (resp) {
         console.log(resp);
         return async('third')
    }).then(function (resp) {
         console.log(resp);
         return async('fourth');
    }).then(function (resp) {
         console.log(resp);
    });
    
    並行
    並列に対応する関数(async('a')およびasync('b')およびasync('c'))を事前に配列に装備する.これらはQ.all()で並列処理され、すなわちこれらの関数は同時に処理される.
    var promises = [];
    promises.push(async('a'));
    promises.push(async('b'));
    promises.push(async('c'));
    Q.all(promises);
    
    パラレルリンク
    まず串を刺してから並べても、先を並べてから刺してもいいです.並列プログラムQ.all(promises)の後にthenのキーワードを追加し、シリアルパラレルミックスを実現し、データを引き出した後にすべてのデータを操作するのに非常に適している.
    Q.all(promises).then(function(){
       console.log('hello world');
    })
    
    締め括りをつける
    最後に、このノートは物理回路のように書かれています.q公式文書のコードを参照してください.
    以前の非同期プログラムのコードはこのようです.
    step1(function (value1) {
        step2(value1, function(value2) {
            step3(value2, function(value3) {
                step4(value3, function(value4) {
                    // Do something with value4
                });
            });
        });
    });
    
    現在非同期プログラミングのコードはこのようです.
    Q.fcall(promisedStep1)
    .then(promisedStep2)
    .then(promisedStep3)
    .then(promisedStep4)
    .then(function (value4) {
        // Do something with value4
    })
    .catch(function (error) {
        // Handle any error from all above steps
    })
    .done();
    
    転載します.出典を教えてください.総ディレクトリ先端経験集器