どのように関数をプロモーションで実現しますか?

3313 ワード

どのように関数をプロモーションで実現しますか?
これはいい問題だと思います.現在、私の会社では、NodeJSで開発すれば、フレームワークから具体的なアプリケーション・インスタンスまで、すべてpromiseを中心とした開発方式に移行しました.メリットは、みんながpromiseを使って非同期方式を解決することであり、リフレクトを考慮する必要はない(callback).しかし、事情にはいつも特例があり、現実のnpmにはまだ多くの倉庫がpromiseで実現されていない.このように使用者につらい思いをさせて、nodeを使ってpromiseが現れました.世界はどうしてこんなに散らかっていると思いますか?
神様は光が欲しいと言って、光があります.私も言いたいのですが、大神さんが解決すると言ってcallbackがあります.
1 promisifyとは?
簡単に言えば、promoisifypromisify関数を持って、callbackを再利用して実現される技術案であり、それは一苦労にして解決できます.どのように関数をpromiseで再実現するかという問題です.
2 promisifyの使用promiseの使用は、もちろん、あるpromisifyの実現から逸脱できない.ここでpromiseを選択します.それは十分に強いので、勉強には十分です.
次に、bluebirdにおけるpromiseに関するいくつかの方法を説明する.bluebirdpromisifyにおいて、2つの方法は、それぞれプロモーションとプロモーションです.
2.1 promisifybluebirdは、1つのAPI形式の関数呼び出しをprmoisifyに変換するものである.
ここで説明したいのですが、nodeCallbackとはどういう意味ですか?promisenodeCallbackの常用語である.表現とは、エラー優先のコールバック関数の総称である.
二つの意味が含まれています.
  • nodeCallbackコールバック関数署名.
  • Nodojsコールバック関数が現れる位置.
  • nodeCallbackサイン
    このコールバック関数の署名は必ずこうなります.
    //      
    function fooCallBack(err, a, b){
      // something
      console.log(a,b);
    }
    
    //     
    function foo1CallBack(a,b,err){
      
    }
    
    
    Nodejs関数の呼び出しパラメータのうち、最初のパラメータは、nodeCallback、すなわちnodeCallBack関数の最初のパラメータが必ず入ってくるのはfooCallBackであり、他のパラメータではないことがわかる.この条件を満たせば、errと呼ぶことができる.
    nodeCallBackの出現順noodeCallBackは、非同期関数の最後に必ず現れる.
    
    //      。
    function foo(a,b,nodeCallback){
      // pass
    }
    
    //       nodeCallback
    function foo(a,nodeCallback,b){
      // pass
    }
    
    
    署名と順序が満たされていれば、errと呼ぶことができる.nodeCallbackはどこにありますか?教えてあげましょう.全部のnodeCallBack標準カバンの中の非同期のところは全部それです.
    はい、こんなに多くのnodeCallBackを言いましたが、今はnodeCallbackはどうやって使いますか?
    
    const Promise = require('bluebird');
    const fs = require('fs');
    
    //     ,   callback    nodeCallback
    fs.readFile('./test.js',function(err,data){
      console.log(data);
    });
    
    // promisify   
    const readFileAsync = Promise.promisify(fs.readFile);
    
    readFileAsync('./test.js').then(function(data){
      console.log(data);
    }).catch(console.log);
    
    
    簡単でしょう.具体的に実現するならともかく、知りたいのはNodeJSに行きましょう.
    2.2 promisifyallnodeCallbackが一度に関数を回転することしかできないというなら、promosifyの役割は一度に一ライブラリのファイルを転送することです.
    もっとはっきり言ってください.googleは、1つのライブラリの関数を全部promisifyの形にして、変更後の関数をpromisifyallのサフィックスにしてもいいです.コードを見る:
    const Promise = require('bluebird');
    
    const fs = Promise.promisifyall(require('fs'));
    
    fs.readFileAsync('./test.js').then(function(data){
      console.log(data);
    }).catch(console.log);
    
    
    上記から分かるように、promisifyallという標準ライブラリは、promiseを経て、すべての関数がAsyncによって化されました.fsによって化された関数名は、promisifyallとなる.
    3結論promisepromiseという二つの方法をマスターしたら、みんなはこれからきっと正しいと思います.